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

당신은 데이터 목록을 초기화 할 수 있습니다 사용하는 클래스에 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

하나의 항목을 전달하고 싶다면 구문은 무엇이겠습니까? – khaihon

+0

그러면 생성자를 사용하지 않을 것입니다. 당신은 그것을 비워두고 초기화 후에 Items.Add (itemToAdd) 호출을 만들 것입니다. 그러나 코드 "context.Items (i => i.Property =="Desired ");" 컬렉션에 항목이 하나라도 있어도 컬렉션을 반환합니다. – nmaait

0

물론, 당신은 단지를 전달하여

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

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

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