c# - 使用对象初始值设定项是否会提高性能,或者是否美观?

标签 c#

因此,比较将介于:

MyClass foo = new MyClass();
foo.Property1 = 4;
foo.Property2 = "garfield";

MyClass foo = new MyClass { Property1 = 4, Property2 = "garfield" };

它是语法糖,还是实际上有某种性能提升(无论多么微小?)

最佳答案

使用对象初始值设定项实际上可能非常非常比调用构造函数然后分配属性稍微慢一些,因为它有一个额外的分配:

MyClass foo = new MyClass();
foo.Property1 = 4;
foo.Property2 = "garfield";

对比

MyClass tmp = new MyClass();
tmp.Property1 = 4;
tmp.Property2 = "garfield";
MyClass foo = tmp;

属性都是在引用赋值给变量之前赋值的。如果重用变量,这种差异可见:

using System;

public class Test
{
    static Test shared;

    string First { get; set; }

    string Second
    {
        set
        {
            Console.WriteLine("Setting second. shared.First={0}",
                              shared == null ? "n/a" : shared.First);
        }
    }

    static void Main()
    {
        shared = new Test { First = "First 1", Second = "Second 1" };
        shared = new Test { First = "First 2", Second = "Second 2" };        
    }
}

输出显示,在 Main 的第二行中,当设置 Second 时(在 First 之后), 的值>shared.First 仍然是“First 1” - 即 shared 尚未分配新值。

不过正如 Marc 所说,您几乎肯定永远不会真正发现差异。

匿名类型保证使用构造函数 - 形式在 C# 3 语言规范的第 7.5.10.6 节中给出。

关于c# - 使用对象初始值设定项是否会提高性能,或者是否美观?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1215137/

相关文章:

c# - 如何使用 powershell/c# 列出 SharePoint 中的所有 2013 工作流程

c# - WPF ListView 键盘导航问题

c# - 将 N 个 Excel 工作簿中的第 X 个工作表复制到新工作簿中 - 使用哪种语言?

c# - 如何在 WPF 应用程序中使用 C# 制作类似 google 的自动完成文本框?

c# - 为什么要使用 MVVM?

c# - 在电子邮件中添加了 Schema.org 标记,不会影响 Gmail 的收件箱,无论是在移动应用程序还是 Web 应用程序中

c# - 类似 Internet Explorer 收藏夹窗口的弹出窗口

c# - C#中如何从字符串中获取数字

c# - 从 DateTime.Now 计算 db.DaysPastDue - Controller 中的 db.Loan.DueDate

c# - Async CTP : Does Task. Factory.StartNew 使用 IO 完成线程?