2013-03-06 5 views

답변

7

var 그런 식으로 작동하지 않으므로 형식 추론을 사용하여 같음 뒤에 오는 항목을 기반으로 유형을 할당합니다. 당신은 당신이 (이 null을 것)을 초기화 한 전에 myList에 액세스하려는로

또한, 그건 널 (null) 예외를 던질 것입니다. 당신은 변수의 유형을 지정해야

var myList = Enumerable.Empty<Item>(); 
+0

나는 그것을 "게으른 평가"라고 묘사하지 않을 것입니다. 그것은 형식 유추입니다. –

+0

@Damien_The_Unbeliever 당신이 옳습니다, 변경;) – mattytommo

+0

nice! 'var myList = myObjects.SelectMany (m => m.Items.Cast ()); ' – markzzz

2

Union 동일한 유형을 반환이 시도 예를 들어, 빈 콜렉션으로 시작해야합니다 :

IEnumerable<Item> myList = new List<Item>(); 
1

을하고 : 다음, 당신이 IEnumerable<Item> 그 안에 사용하고 고려 걸립니다

IEnumerable<Item> myList = myObjects.SelectMany(m => m.Items.Cast<Item>()); 
0

컴파일러는 당신이 그렇게

을 만들 입력 알 수 없습니다
var myList; 

은 컴파일러에게 어떤 유형이 myList인지 알려주지 않습니다. 당신은

List<Item> myList; 

을 할 수 있지만 .Union에 대한 호출이 당신에게 NullReferenceException이를 줄 것이다.

는 왜 빈리스트

List<Item> myList = new List<Item> 

또는 IEnumerable을 시작하지?

IEnumerable<Item> myEnumerable = Enumerable.Empty<Item>() 
2

Union의 문제가 아니다 - 그것은 어떤 초기화되지 않은 지역 변수에서 읽는의 문제이다.

var myVar = Enumerable.Empty<Item>(); 

을 ... 또는 mattytommo 같이 단지 (Union이처럼) 단지 고유 요소를 얻을 수 Distinct()에 아마도 호출, SelectMany를 사용

당신은 사용할 수 있습니다.

+0

+1에 대한 'Enumerable.Empty' Jon :) – mattytommo

관련 문제