有如下匿名类型代码
namespace ListNode
{
public class Program
{
static void Main()
{
var patent1 =
new
{
Title = "Bifocals",
YearOfPublication = "1784"
};
var patent2 =
new
{
Title = "Phonograph",
YearOfPublication = "1877"
};
var patent3 =
new
{
patent1.Title,
// Renamed to show property naming
Year = patent1.YearOfPublication
};
Console.WriteLine(
$"{ patent1.Title } ({ patent1.YearOfPublication })");
Console.WriteLine(
$"{ patent2.Title } ({ patent2.YearOfPublication })");
Console.WriteLine();
Console.WriteLine(patent1);
Console.WriteLine(patent2);
Console.WriteLine();
Console.WriteLine(patent3);
}
}
}
输出
虽然Console.WriteLine()的实现是调用ToString(),但在上面的代码中,Console.WriteLine()的输出并不是默认的ToString(),相反,输出的是一对对PropertyName=value,匿名类型的每个属性都有一对这样的输出。之所以会这样,是因为编译器在生成匿名类型的代码时重写了ToString()方法,对输出进行了格式化,类似的生成的类型还重写了Equals()和GetHashCode()的实现。