Use*_*ser 3 .net anonymous-types
我最近在StackOverflow上浏览了这个问题,看着接受的答案,我想知道实际的具体类型是什么
var ordinals = new {
Test1 = SomeFunctionReturningInt32("Test1"),
Test2 = SomeFunctionReturningInt32("Test2")
};
Run Code Online (Sandbox Code Playgroud)
这对MSILed有什么影响?
它会在程序集中编译为通用内部类型.就像是:
internal sealed class SomeCompilerGeneratedNameHere<T1, T2>
{
public SomeCompilerGeneratedNameHere(T1 test1, T2 test2)
{
...
}
public T1 Test1 { get { ... } }
public T2 Test2 { get { ... } }
// Overrides for Equals, ToString, GetHashCode
}
Run Code Online (Sandbox Code Playgroud)
那么在你的情况下,它会使用SomeCompilerGeneratedNameHere<int, int>.(名称本身是一个"无法形容"的名称,因此您无法在代码中明确地引用它,并且不会有任何与有效C#类型的命名冲突.)
我不记得构造函数和属性是否实际公开或者它们是否也是内部的 - 我知道类型本身是内部的.
具有相同顺序的相同属性名称的所有匿名类型将使用相同的泛型类型,可能使用不同的类型参数.
请注意,这是特定于实现的 - 我不相信规范保证将使用泛型类型; 每个匿名类型可以使用一种类型.该规范并保证,如果他们有相同的属性名两个匿名类型创建表达式将使用相同的类型和类型以相同的顺序.