【问题标题】:Instantiate a class object and initialize a list实例化一个类对象并初始化一个列表
【发布时间】:2012-04-26 23:49:39
【问题描述】:

有没有办法可以用现有项目初始化类中的列表?

我基本上想实例化一个类对象并初始化一个列表,其中包含现有项目和新项目中已有的一些元素。

public class Item
{
    public string Property {get; set;}
}

public class MyClass
{
    public virtual IEnumerable<Item> Items {get; set;}
}

var itemToAdd = context.Items( i => i.Property == "Desired" );

MyClass myclass = new MyClass()
{
    Items = new List<Item>() 
    {
        new List<Item> (),
        { 
            Property = "New" 
        },
        // Would like itemToAdd to be added here when I create a new List.
    }
};

【问题讨论】:

    标签: c# list object


    【解决方案1】:

    您可以通过将集合传递给构造函数来使用数据初始化列表。例如

    var itemToAdd = context.Items( i => i.Property == "Desired" );
    
    MyClass myclass = new MyClass()
    {
        Items = new List<Item>(itemToAdd) // You can pass any collection of IEnumerable here.
    }
    

    【讨论】:

    • 如果我只想传递一项,语法会是什么?
    • 那么你可能不会使用构造函数。您可以将其留空并在初始化后进行 Items.Add(itemToAdd) 调用。但是代码“context.Items(i => i.Property == "Desired");"即使其中只有一项,也会返回一个集合。
    【解决方案2】:
    var itemToAdd = context.Items( i => i.Property == "Desired" );  
    
    MyClass myclass = new MyClass() 
    {     
        Items = new List<Item>(itemToAdd)  // <--####  Here    
        {         
           new List<Item> () 
           {              
               Property = "New"          
           }
        } 
    };
    

    【讨论】:

      【解决方案3】:

      当然,您只需将 Add 方法和 IEnumerable 添加到您的类中

      class InitEx<T> : IEnumerable<T>
      {
        List<T> _data = new List<T>();
      
        public IEnumerator<T> GetEnumerator()
        {
          return _data.GetEnumerator();
        }
      
        System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()
        {
          return _data.GetEnumerator();
        }
      
        public void Add(T i)
        {
          _data.Add(i);
        }
      }
      

      示例使用

      var ie = new InitEx<int> { 1, 2, 3 };
      

      【讨论】:

      • ...我想我读错了他的问题——哈哈。嗯 :) 留给后代
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-03-19
      • 2022-11-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多