单变量匿名对象初始化
anonymous object initialisation with single variable
我发现找到了这样一行:
var myObject = new MyClass { 42 };
而且我想知道是否可以执行这样的操作。文档说,如果定义匿名类型,则必须使用对象初始值设定项”,所以这很明显,但我找不到任何关于大括号中的单独整数的信息。
否,但您可以调用构造函数;
new MyClass(42)
如果定义了一个,或者像这样设置任何可设置的属性;
new MyClass { MeaningOfLife=42 };
您提供的代码不是 class 初始值设定项或匿名类型。这适用于的 class 类型是一个集合,但它可以最低限度地定义为:
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
写入控制台。
语法是一个集合初始化语法,它基本上需要 class 来实现 IEnumerable<T>
并有一个 public Add(T value)
方法。
您也可以添加多个值:
var myObject = new MyClass { 42, 43, 44 };
我发现找到了这样一行:
var myObject = new MyClass { 42 };
而且我想知道是否可以执行这样的操作。文档说,如果定义匿名类型,则必须使用对象初始值设定项”,所以这很明显,但我找不到任何关于大括号中的单独整数的信息。
否,但您可以调用构造函数;
new MyClass(42)
如果定义了一个,或者像这样设置任何可设置的属性;
new MyClass { MeaningOfLife=42 };
您提供的代码不是 class 初始值设定项或匿名类型。这适用于的 class 类型是一个集合,但它可以最低限度地定义为:
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
写入控制台。
语法是一个集合初始化语法,它基本上需要 class 来实现 IEnumerable<T>
并有一个 public Add(T value)
方法。
您也可以添加多个值:
var myObject = new MyClass { 42, 43, 44 };