在Utility中定义了两个GetEmployee方法,分别返回以Anonymous Type形式和Named Type形式的Employee对象。
| using System; using System.Collections.Generic; using System.Linq; using System.Text; using Artech.NewFeatureInCSharp.Library; namespace Artech.NewFeatureInCSharp.ConsoleApp { class Program { static void Main(string[] args) { var v1 = new{ID = Guid.NewGuid(), Name= "Zhang San" }; var v2 = new { ID = Guid.NewGuid(), Name = "Li Si"}; var v3 = Utility.Anonymous_GetEmployee(Guid.NewGuid(), "Wang Wu"); Console.WriteLine("var v1 = new{ID = Guid.NewGuid(), Name= \"Zhang San\" };"); Console.WriteLine("var v2 = new{ID = Guid.NewGuid(), Name= \"Li Si\" };"); Console.WriteLine("var v3 = Utility.Anonymous_GetEmployee(Guid.NewGuid(), \"Wang Wu\");"); Console.WriteLine("\nv1.GetType() = {0}", v1.GetType()); Console.WriteLine("v2.GetType() = {0}", v2.GetType()); Console.WriteLine("v3.GetType() = {0}", v3.GetType()); Console.WriteLine("\nobject.ReferenceEquals(v1.GetType(),v2.GetType()) = {0}",object.ReferenceEquals(v1.GetType(),v2.GetType())); Console.WriteLine("object.ReferenceEquals(v1.GetType(),v3.GetType()) = {0}", object.ReferenceEquals(v1.GetType(), v3.GetType())); Console.WriteLine("\n\n"); var v4 = new Employee { ID = Guid.NewGuid(), Name = "Zhang San" }; var v5 = new Employee { ID = Guid.NewGuid(), Name = "Li Si" }; var v6 = Utility.GetEmployee(Guid.NewGuid(), "Wang Wu"); Console.WriteLine("var v4 = new Employee{ID = Guid.NewGuid(), Name= \"Zhang San\" };"); Console.WriteLine("var v5 = new Employee{ID = Guid.NewGuid(), Name= \"Li Si\" };"); Console.WriteLine("var v6 = Utility.GetEmployee(Guid.NewGuid(), \"Wang Wu\");"); Console.WriteLine("\nv4.GetType() = {0}", v4.GetType()); Console.WriteLine("v5.GetType() = {0}", v5.GetType()); Console.WriteLine("v6.GetType() = {0}", v6.GetType()); Console.WriteLine("\nobject.ReferenceEquals(v4.GetType(),v5.GetType()) = {0}", object.ReferenceEquals(v4.GetType(), v5.GetType())); Console.WriteLine("object.ReferenceEquals(v4.GetType(),v6.GetType()) = {0}", object.ReferenceEquals(v4.GetType(), v6.GetType())); } } } |
代码不复杂,我在这里简单介绍一下整体的结构。这个结构分两部分,第一部分是基于Anonymous Type的,另一部分是基于Named Employee Type的。在第一部分中,我首先创建了3个Anonymous Type的Instance:v1、v2和v3(v3是通过调用定义在Artech.NewFeatureInCSharp.Library中的Utility获得,其余两个则直接通过Inline的方式创建),第二部分也具有相同的代码结构。
| var v1 = new{ID = Guid.NewGuid(), Name= "Zhang San" }; var v2 = new { ID = Guid.NewGuid(), Name = "Li Si"}; var v3 = Utility.Anonymous_GetEmployee(Guid.NewGuid(), "Wang Wu"); |
| Console.WriteLine("\nv1.GetType() = {0}", v1.GetType()); Console.WriteLine("v2.GetType() = {0}", v2.GetType()); Console.WriteLine("v3.GetType() = {0}", v3.GetType()); |
最后调用object.ReferenceEquals对这3个Type进行比较。
Console.WriteLine("\nobject.ReferenceEquals(v1.GetType(),v2.GetType()) = {0}",object.ReferenceEquals(v1.GetType(),v2.GetType()));
Console.WriteLine("object.ReferenceEquals(v1.GetType(),v3.GetType()) = {0}", object.ReferenceEquals(v1.GetType(), v3.GetType()));

