내가 좋아하는 일도 필요합니다빈 var에서 시작하여 Union을 사용할 수 있습니까?
var myList;
foreach (MyObject myObject in myObjects)
{
myList = myList.Union(myObject.Items.Cast<Item>());
}
을하지만 난 빈 VAR을 initializate 수없는 것 같다. 솔루션?
내가 좋아하는 일도 필요합니다빈 var에서 시작하여 Union을 사용할 수 있습니까?
var myList;
foreach (MyObject myObject in myObjects)
{
myList = myList.Union(myObject.Items.Cast<Item>());
}
을하지만 난 빈 VAR을 initializate 수없는 것 같다. 솔루션?
var
그런 식으로 작동하지 않으므로 형식 추론을 사용하여 같음 뒤에 오는 항목을 기반으로 유형을 할당합니다. 당신은 당신이 (이 null
을 것)을 초기화 한 전에 myList
에 액세스하려는로
또한, 그건 널 (null) 예외를 던질 것입니다. 당신은 변수의 유형을 지정해야
var myList = Enumerable.Empty<Item>();
Union
동일한 유형을 반환이 시도 예를 들어, 빈 콜렉션으로 시작해야합니다 :
IEnumerable<Item> myList = new List<Item>();
을하고 : 다음, 당신이 IEnumerable<Item>
그 안에 사용하고 고려 걸립니다
IEnumerable<Item> myList = myObjects.SelectMany(m => m.Items.Cast<Item>());
컴파일러는 당신이 그렇게
을 만들 입력 알 수 없습니다var myList;
은 컴파일러에게 어떤 유형이 myList
인지 알려주지 않습니다. 당신은
List<Item> myList;
을 할 수 있지만 .Union
에 대한 호출이 당신에게 NullReferenceException이를 줄 것이다.
List<Item> myList = new List<Item>
또는 IEnumerable을 시작하지?
IEnumerable<Item> myEnumerable = Enumerable.Empty<Item>()
이 Union
의 문제가 아니다 - 그것은 어떤 초기화되지 않은 지역 변수에서 읽는의 문제이다.
var myVar = Enumerable.Empty<Item>();
을 ... 또는 mattytommo 같이 단지 (Union
이처럼) 단지 고유 요소를 얻을 수 Distinct()
에 아마도 호출, SelectMany
를 사용
당신은 사용할 수 있습니다.
+1에 대한 'Enumerable.Empty' Jon :) – mattytommo
나는 그것을 "게으른 평가"라고 묘사하지 않을 것입니다. 그것은 형식 유추입니다. –
@Damien_The_Unbeliever 당신이 옳습니다, 변경;) – mattytommo
nice! 'var myList = myObjects.SelectMany (m => m.Items.Cast- ()); ' –
markzzz