单变量匿名对象初始化

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 };