2012-04-26 106 views
1

有没有一种方法可以初始化一个包含现有项目的类中的列表?实例化一个类对象并初始化一个列表

我基本上想要实例化一个类对象,并从现有和新项目中初始化一个已经存在的元素的列表。

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

回答

5

您可以初始化数据的列表收集到构造函数。例如

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. 
} 
+0

如果我只想传递一个项目,语法会是什么? – khaihon 2012-04-27 00:12:07

+0

然后你可能不会使用构造函数。在初始化之后,您将它留空并进行Items.Add(itemToAdd)调用。然而代码“context.Items(i => i.Property ==”Desired“);”即使只有一个项目,也会返回一个集合。 – nmaait 2012-04-27 00:21:54

0

当然,你只是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 }; 
+0

......我想我读了他的问题错了 - 哈哈。好吧:)留给后人 – payo 2012-04-26 23:56:28

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

MyClass myclass = new MyClass() 
{  
    Items = new List<Item>(itemToAdd) // <--#### Here  
    {   
     new List<Item>() 
     {    
      Property = "New"   
     } 
    } 
};