因此,比较将介于:
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/