【发布时间】:2013-05-23 13:20:10
【问题描述】:
我在搞乱匿名类型,我不小心将它输出到控制台上。它看起来基本上是我如何定义的。
这是一个重现它的简短程序:
using System;
class Program
{
public static void Main(string[] args)
{
int Integer = 2;
DateTime DateTime = DateTime.Now;
Console.WriteLine(new { Test = 0, Integer, s = DateTime });
Console.ReadKey(true);
}
}
现在,输出是:
{ Test = 0, Integer = 2, s = 28/05/2013 15:07:19 }
我尝试使用 dotPeek 进入程序集以找出原因,但没有任何帮助。[1]这是 dotPeek 的代码:
// Type: Program
// Assembly: MyProjectName, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
// Assembly location: Not telling you! :P
using System;
internal class Program
{
public static void Main(string[] args)
{
Console.WriteLine((object) new
{
Test = 0,
Integer = 2,
s = DateTime.Now
});
Console.ReadKey(true);
}
}
根本没有太大的不同。
那么它是如何工作的呢?它是如何输出的呢?
注意事项:
[1]:我忘记打开“显示编译器生成的代码”,这就是我不知道它是如何工作的原因。
【问题讨论】:
-
设计?这里的实际问题/问题是什么?
-
我想知道它是如何工作的!
-
也许 ToString 使用反射.. 来打印每个键值对。
-
@LewsTherin 我认为这太过分了,但这是可能的!
-
@Jeppe 这将是一个挑战:规范没有为
ToString在匿名类型上定义任何行为
标签: c# .net tostring anonymous-types