联盟是否可以从空变量开始?

时间:2013-03-06 14:20:34

标签: c# .net linq union var

我需要一些像:

var myList;

foreach (MyObject myObject in myObjects)
{
    myList = myList.Union(myObject.Items.Cast<Item>());
}

但似乎我无法初始化一个空的var。溶液

5 个答案:

答案 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>()