c# - 如果字段的顺序不同,为什么编译器会为匿名类型生成不同的类

标签 c# .net anonymous-types

我考虑过两种情况:

var a = new { a = 5 };
var b = new { a = 6 };
Console.WriteLine(a.GetType() == b.GetType()); // True

Ideone: http://ideone.com/F8QwHY

和:

var a = new { a = 5, b = 7 };
var b = new { b = 7, a = 6 };
Console.WriteLine(a.GetType() == b.GetType()); // False

Ideone: http://ideone.com/hDTcxX

问题是为什么字段顺序真的很重要?

这是否有任何原因,或者仅仅是因为它是(这就是设计)。

如果原因只是匿名类型不应该以这种方式使用并且您不应该诉诸 GetType,那么为什么编译器在第一种情况下重用单个类并且不只是为每个匿名类型声明生成一个新类?

最佳答案

所以设计决定的原因是ToString。匿名类型根据顺序返回不同的 string。阅读Eric Lippert's blog .

{ a = 5, b = 7 }
{ b = 7, a = 6 }

Demo

关于c# - 如果字段的顺序不同,为什么编译器会为匿名类型生成不同的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16859594/

相关文章:

c# - 写回解码文件后出现异常字符添加

c# - 创建动态匿名类型变量

java - 如何在java中访问匿名外部类的 "this"引用

android - 为什么我应该将可移植类库与 Xamarin 一起使用?

c# - 您可以在 .NET 中从 JSON 实例化对象实例吗?

c# - 使用NEST进行Elasticsearch。如何根据 child 的属性搜索 parent

c# - 构建完整的 Web 服务、网站和 iPhone 应用程序

c# - "must declare the scalar variable ' @x '"绑定(bind)SQL参数时

.net - 无法加载文件或程序集 'PDFNet' 或其依赖项之一。试图加载格式不正确的程序

.net - 如何在 MonoTouch 中使用 System.IO.Packaging