1

我需要类似的东西:

var myList;

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

但似乎我无法初始化一个空变量。解决方案?

4

5 回答 5

7

var不是那样工作的,它使用类型推断来根据等号之后的内容分配类型。

myList 此外,当您在初始化它之前尝试访问时,这会引发空异常(它会是null)。试试这个:

IEnumerable<Item> myList = myObjects.SelectMany(m => m.Items.Cast<Item>());
于 2013-03-06T14:23:20.447 回答
2

Union考虑到您正在使用它IEnumerable<Item>内部,返回与它相同的类型,然后:

var myList = Enumerable.Empty<Item>();
于 2013-03-06T14:24:29.587 回答
2

这不是问题Union- 这是尝试从任何未初始化的局部变量中读取的问题。

你可以使用:

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

...或者只是使用SelectManymattytommo 所示的方法,可能需要调用来Distinct()获取不同的元素(就像Union那样)。

于 2013-03-06T14:24:36.200 回答
1

您必须指定变量的类型,并且必须从一个空集合开始,例如:

IEnumerable<Item> myList = new List<Item>();
于 2013-03-06T14:24:31.713 回答
0

编译器无法知道您要创建的类型,所以

var myList;

不足以告诉编译器有什么类型myList。你可以做

List<Item> myList;

但是调用.Union会给你一个 NullReferenceException。

那么为什么不从一个空列表开始呢

List<Item> myList = new List<Item>

还是一个 IEnumerable?

IEnumerable<Item> myEnumerable = Enumerable.Empty<Item>()
于 2013-03-06T14:24:33.727 回答