使用单个变量进行匿名对象初始化

时间:2016-07-28 10:40:46

标签: c# .net object-initializers

我发现找到了这样的一句话:

var myObject = new MyClass { 42 };  

我想知道是否可以执行此类操作。文档说明,如果您要定义匿名类型,则必须使用对象初始化程序。所以这是显而易见的,但我无法找到任何关于大括号中的单独整数。

2 个答案:

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