我发现找到了这样的一句话:
var myObject = new MyClass { 42 };
我想知道是否可以执行此类操作。文档说明,如果您要定义匿名类型,则必须使用对象初始化程序。所以这是显而易见的,但我无法找到任何关于大括号中的单独整数。
答案 0 :(得分:7)
不,但你可以调用构造函数;
new MyClass { MeaningOfLife=42 };
如果定义了一个,或者设置这样的任何可设置属性;
{{1}}
答案 1 :(得分:3)
您提供的代码不是类初始值设定项或匿名类型。这种类的类是一个集合,但它可以最低限度地定义:
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 };