我需要一些像:
var myList;
foreach (MyObject myObject in myObjects)
{
myList = myList.Union(myObject.Items.Cast<Item>());
}
但似乎我无法初始化一个空的var。溶液
答案 0 :(得分:7)
var
不能像那样工作,它使用类型推断根据等于之后的内容来分配类型。
此外,在您初始化之前尝试访问myList
时,它会抛出一个空例外(它是null
)。试试这个:
IEnumerable<Item> myList = myObjects.SelectMany(m => m.Items.Cast<Item>());
答案 1 :(得分:2)
Union
返回相同的类型,考虑到你在其中使用IEnumerable<Item>
,然后:
var myList = Enumerable.Empty<Item>();
答案 2 :(得分:2)
这不是Union
的问题 - 这是尝试从任何未初始化的局部变量中读取的问题。
您可以使用:
var myVar = Enumerable.Empty<Item>();
...或者只是使用mattytommo所示的SelectMany
,可能会调用Distinct()
来获取不同的元素(如Union
所示)。
答案 3 :(得分:1)
您必须指定变量的类型,并且必须以空集合开头,例如:
IEnumerable<Item> myList = new List<Item>();
答案 4 :(得分:0)
编译器无法知道您要创建的类型
var myList;
不足以告诉编译器myList
的类型。
你可以做到
List<Item> myList;
但是对.Union
的调用会给你一个NullReferenceException。
那么为什么不从一个空列表开始
List<Item> myList = new List<Item>
还是IEnumerable?
IEnumerable<Item> myEnumerable = Enumerable.Empty<Item>()