【问题标题】:anonymous object initialisation with single variable使用单个变量进行匿名对象初始化
【发布时间】:2016-12-02 16:57:24
【问题描述】:

我发现有这样一行:

var myObject = new MyClass { 42 };  

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

【问题讨论】:

    标签: c# .net object-initializers


    【解决方案1】:

    不,但您可以调用构造函数;

    new MyClass(42)
    

    如果定义了一个,或者像这样设置任何可设置的属性;

    new MyClass { MeaningOfLife=42 };
    

    【讨论】:

    • 这个答案是错误的。问题中提供的代码对于集合初始化程序完全有效。
    【解决方案2】:

    您提供的代码不是类初始化程序或匿名类型。它适用的类是一个集合,但它可以最低限度地定义为:

    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&lt;T&gt; 并有一个公共的Add(T value) 方法。

    然后您也可以添加多个值:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-11-10
      • 1970-01-01
      • 2013-06-07
      • 2016-09-16
      • 1970-01-01
      • 2013-04-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多