最近我遇到了一些类似于这样的代码:
public class Test
{
public ICollection<string> Things { get; set; }
public Test()
{
Things = new List<string> { "First" };
}
public static Test Factory()
{
return new Test
{
Things = { "Second" }
};
}
}
调用
Test.Factory()
会得到一个包含"First"
和"Second"
的Things
集合的Test
对象。看起来,
Things = { "Second" }
这行代码调用了Things
的Add
方法。如果将ICollection
更改为IEnumerable
,则会出现语法错误,提示"IEnumerable<string> does not contain a definition for 'Add'
"。另外,很明显只有在对象初始化器中才能使用这种语法。像下面这样的代码是无效的:
var test = new Test();
test.Things = { "Test" };
这个特性叫什么?它在哪个版本的C#中引入的?为什么它只能在对象初始化器中使用?
{
都会在前面加上new
关键字来表示完全新的对象。 - Synoptic=
是“添加”而不是“设置”?我不喜欢它 - 非常令人困惑。 - PeteGO