【发布时间】:2016-12-02 16:57:24
【问题描述】:
我发现有这样一行:
var myObject = new MyClass { 42 };
我想知道是否可以执行这样的操作。文档说,如果您要定义匿名类型,则必须使用对象初始化程序”所以这很明显,但我找不到任何关于大括号中的单独整数的信息。
【问题讨论】:
标签: c# .net object-initializers
我发现有这样一行:
var myObject = new MyClass { 42 };
我想知道是否可以执行这样的操作。文档说,如果您要定义匿名类型,则必须使用对象初始化程序”所以这很明显,但我找不到任何关于大括号中的单独整数的信息。
【问题讨论】:
标签: c# .net object-initializers
不,但您可以调用构造函数;
new MyClass(42)
如果定义了一个,或者像这样设置任何可设置的属性;
new MyClass { MeaningOfLife=42 };
【讨论】:
您提供的代码不是类初始化程序或匿名类型。它适用的类是一个集合,但它可以最低限度地定义为:
public class MyClass : IEnumerable<int>
{
private List<int> _list = new List<int>();
public void Add(int x)
{
Console.WriteLine(x);
_list.Add(x);
}
public IEnumerator<int> GetEnumerator()
{
return _list.GetEnumerator();
}
IEnumerator IEnumerable.GetEnumerator()
{
return _list.GetEnumerator();
}
}
现在您可以运行问题中的代码:
var myObject = new MyClass { 42 };
您将收到42 写入控制台。
该语法是一个集合初始化语法,它基本上要求类实现IEnumerable<T> 并有一个公共的Add(T value) 方法。
然后您也可以添加多个值:
var myObject = new MyClass { 42, 43, 44 };
【讨论】: