浅析C# Anonymous Type

开发 后端
这里介绍C# Anonymous Type和一般的Named Type并没有本质的区别。但是话不能太绝对,他们之间还是有一点小小的差异。

C# Anonymous Type和一般的Named Type并没有本质的区别。但是话不能太绝对,他们之间还是有一点小小的差异。到底是什么样差异,我在这里先卖一个关子。在具体介绍这个差异的时候,我们先来看看一个Sample:


Artech.NewFeatureInCSharp.Library中定一个Employee Type:

  1. usingSystem;  
  2. usingSystem.Collections.Generic;  
  3. usingSystem.Linq;  
  4. usingSystem.Text;  
  5.  
  6. namespaceArtech.NewFeatureInCSharp.Library  
  7. {  
  8. publicclassEmployee  
  9. {  
  10. privateGuid_id;  
  11. privatestring_name;  
  12.  
  13. publicGuidID  
  14. {  
  15. get{return_id;}  
  16. set{_id=value;}  
  17. }  
  18.  
  19. publicstringName  
  20. {  
  21. get{return_name;}  
  22. set{_name=value;}  
  23. }  
  24. }  

和一个Static的Utility Class:

  1. usingSystem;  
  2. usingSystem.Collections.Generic;  
  3. usingSystem.Linq;  
  4. usingSystem.Text;  
  5.  
  6. namespaceArtech.NewFeatureInCSharp.Library  
  7. {  
  8. publicstaticclassUtility  
  9. {  
  10. publicstaticobjectAnonymous_GetEmployee(Guidid,stringname)  
  11. {  
  12. returnnew{ID=id,Name=name};  
  13. }  
  14.  
  15. publicstaticEmployeeGetEmployee(Guidid,stringname)  
  16. {  
  17. returnnewEmployee{ID=id,Name=name};  
  18. }  
  19. }  

在Utility中定义了两个GetEmployee方法,分别返回以Anonymous Type形式和Named Type形式的Employee对象。

  1. usingSystem;  
  2. usingSystem.Collections.Generic;  
  3. usingSystem.Linq;  
  4. usingSystem.Text;  
  5. usingArtech.NewFeatureInCSharp.Library;  
  6.  
  7. namespaceArtech.NewFeatureInCSharp.ConsoleApp  
  8. {  
  9. classProgram  
  10. {  
  11. staticvoidMain(string[]args)  
  12. {  
  13. varv1=new{ID=Guid.NewGuid(),Name="ZhangSan"};  
  14. varv2=new{ID=Guid.NewGuid(),Name="LiSi"};  
  15. varv3=Utility.Anonymous_GetEmployee(Guid.NewGuid(),"WangWu");  
  16. Console.WriteLine("varv1=new{ID=Guid.NewGuid(),Name=\"ZhangSan\"};");  
  17. Console.WriteLine("varv2=new{ID=Guid.NewGuid(),Name=\"LiSi\"};");  
  18. Console.WriteLine("varv3=Utility.Anonymous_GetEmployee(Guid.NewGuid(),\"WangWu\");");  
  19.  
  20. Console.WriteLine("\nv1.GetType()={0}",v1.GetType());  
  21. Console.WriteLine("v2.GetType()={0}",v2.GetType());  
  22. Console.WriteLine("v3.GetType()={0}",v3.GetType());  
  23.  
  24. Console.WriteLine("\nobject.ReferenceEquals(v1.GetType(),v2.GetType())={0}",
    object.ReferenceEquals(v1.GetType(),v2.GetType()));  
  25. Console.WriteLine("object.ReferenceEquals(v1.GetType(),v3.GetType())={0}",
    object.ReferenceEquals(v1.GetType(),v3.GetType()));  
  26.  
  27. Console.WriteLine("\n\n");  
  28.  
  29. varv4=newEmployee{ID=Guid.NewGuid(),Name="ZhangSan"};  
  30. varv5=newEmployee{ID=Guid.NewGuid(),Name="LiSi"};  
  31. varv6=Utility.GetEmployee(Guid.NewGuid(),"WangWu");  
  32. Console.WriteLine("varv4=newEmployee{ID=Guid.NewGuid(),Name=\"ZhangSan\"};");  
  33. Console.WriteLine("varv5=newEmployee{ID=Guid.NewGuid(),Name=\"LiSi\"};");  
  34. Console.WriteLine("varv6=Utility.GetEmployee(Guid.NewGuid(),\"WangWu\");");  
  35.  
  36. Console.WriteLine("\nv4.GetType()={0}",v4.GetType());  
  37. Console.WriteLine("v5.GetType()={0}",v5.GetType());  
  38. Console.WriteLine("v6.GetType()={0}",v6.GetType());  
  39.  
  40. Console.WriteLine("\nobject.ReferenceEquals(v4.GetType(),v5.GetType())={0}",
    object.ReferenceEquals(v4.GetType(),v5.GetType()));  
  41. Console.WriteLine("object.ReferenceEquals(v4.GetType(),v6.GetType())={0}",
    object.ReferenceEquals(v4.GetType(),v6.GetType()));  
  42. }  
  43. }  

代码不复杂,我在这里简单介绍一下整体的结构。这个结构分两部分,第一部分是基于C# Anonymous Type的,另一部分是基于Named Employee Type的。在第一部分中,我首先创建了3个C# Anonymous Type的Instance:v1、v2和v3(v3是通过调用定义在Artech.NewFeatureInCSharp.Library中的Utility获得,其余两个则直接通过Inline的方式创建),第二部分也具有相同的代码结构。

【编辑推荐】

  1. 浅析C# ArrayList
  2. C#对象初始化学习总结
  3. 使用C#正则表达式匹配相关字符串
  4. C#改写方法学习笔记
  5. 概述C#加框和消框
责任编辑:佚名 来源: 博客园
相关推荐

2009-08-17 16:32:34

C# Anonymou

2009-08-17 16:47:51

C# Anonymou

2009-08-07 17:25:37

C# SortedLi

2009-08-17 18:34:50

C# ChangeCo

2009-08-14 17:45:52

C# ArrayLis

2009-08-25 17:59:49

C#入门

2009-08-18 10:30:30

C#枚举

2009-08-27 13:30:11

C# interfac

2009-08-20 16:15:19

C# 匿名方法

2009-08-20 14:45:13

C# Switch语句

2009-08-27 11:43:31

C#语法

2009-08-26 13:07:07

C#交错数组

2009-09-10 14:52:55

C# get

2009-08-21 17:24:06

C# SingleIn

2009-08-10 17:36:17

C#扩展方法

2009-08-12 15:20:21

C#事件处理

2009-08-14 15:23:10

C#使用ErrorPr

2009-08-17 13:34:02

C#异步操作

2009-07-31 14:03:21

C# Format函数

2009-08-12 17:03:39

C# Static修饰
点赞
收藏

51CTO技术栈公众号