2012-04-26 11 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

を使用する例自分のクラスに

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

Add方法とのIEnumerableを追加し、確かにコンストラクタへのコレクションたとえば、

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

ただ1つの項目を渡したいと思ったら構文は何ですか? – khaihon

+0

おそらくコンストラクタは使用しません。あなたはそれを空のままにして、初期化後にItems.Add(itemToAdd)呼び出しを行います。しかし、コード "context.Items(i => i.Property ==" Desired ");"コレクション内にアイテムが1つしかない場合でもコレクションを返します。 – nmaait

0

あなただけのあなたが渡すことによって、データのリストを初期化することができます

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

...私は彼の質問を間違って読んだと思う。ああ、後悔のためにそれを残す – payo

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

MyClass myclass = new MyClass() 
{  
    Items = new List<Item>(itemToAdd) // <--#### Here  
    {   
     new List<Item>() 
     {    
      Property = "New"   
     } 
    } 
}; 
関連する問題