C# 单变量匿名对象初始化

C# 单变量匿名对象初始化,c#,.net,object-initializers,C#,.net,Object Initializers,我发现了这样一句话: var myObject = new MyClass { 42 }; 我想知道是否有可能进行这种手术。文档中说,如果要定义匿名类型,则必须使用对象初始值设定项,“所以这很明显,但我在大括号中找不到关于单独整数的任何信息。” new MyClass(42) 如果定义了一个,或者像这样设置了任何可设置的属性 new MyClass { MeaningOfLife=42 }; 您提供的代码不是类初始值设定项,也不是匿名类型的代码。该代码适用于的类类型是集合,但可以将其定

我发现了这样一句话:

var myObject = new MyClass { 42 };  

我想知道是否有可能进行这种手术。文档中说,如果要定义匿名类型,则必须使用对象初始值设定项,“所以这很明显,但我在大括号中找不到关于单独整数的任何信息。”

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();
    }
}
您将获得写入控制台的
42

该语法是集合初始值设定项语法,它基本上要求类实现
IEnumerable
,并具有公共
Add(T值)
方法

然后还可以添加多个值:

var myObject = new MyClass { 42, 43, 44 }; 

这个答案是错误的。问题中提供的代码对于集合初始值设定项完全有效。
var myObject = new MyClass { 42, 43, 44 };