C# 对象初始值设定项。这比旧方法快吗?

C# 对象初始值设定项。这比旧方法快吗?,c#,.net,properties,C#,.net,Properties,哪个更快?为什么 Person person = new Person(); person.FirstName = "Scott"; person.LastName = "Guthrie"; person.Age = 32; 关于 好吧,后者是前者的语法糖。应该没有区别。集合初始值设定项符号将在编译时“扩展”到第一个符号,因此不应该有运行时成本。这绝对是一个错误的问题*。您应该问,‘以下哪一项更具可读性?’这种微观基准测试导致代码非常模糊且难以维护(尽管在这种特殊情况下可能不是这样) 例外情

哪个更快?为什么

Person person = new Person();
person.FirstName = "Scott";
person.LastName = "Guthrie";
person.Age = 32;
关于


好吧,后者是前者的语法糖。应该没有区别。

集合初始值设定项符号将在编译时“扩展”到第一个符号,因此不应该有运行时成本。

这绝对是一个错误的问题*。您应该问,‘以下哪一项更具可读性?’这种微观基准测试导致代码非常模糊且难以维护(尽管在这种特殊情况下可能不是这样)

  • 例外情况是,您分析了代码,发现此构造发生在非常热的代码路径中。但是,如果您这样做了,您也会对这两种方法进行基准测试,并自己找到答案:-)

这里只是猜测,但我相信这些代码示例编译为完全相同的代码。这称为对象初始值设定项,我更新了问题标题。集合初始值设定项用于数组和列表。我不在乎哪一个更快。第二个更快(写得更快,读得更快,至少对我来说…:))对象初始值设定项,虽然一开始看起来很不错,但在调试过程中却成了一件非常痛苦的事情。调试器只需一步完成整个初始化列表。我通常在创建匿名类时使用对象初始值设定项。否则,我会回到旧的赋值初始化。就我的2美分。你说得对,CLR将生成相同的代码。@mt#serg是CLR还是C#编译器?@John抱歉,我是说编译器。C#编译器会这样做。IL代码最终是完全相同的,所以在CLR级别没有什么特殊的需要发生。好吧,这是当任何人在互联网上询问性能时给出的建议。它忽略了上面两位代码是相同的这一点。
Person person = new Person { FirstName="Scott", LastName="Guthrie", Age=32 };