C# 是否可以从空变量开始合并?

C# 是否可以从空变量开始合并?,c#,.net,linq,union,var,C#,.net,Linq,Union,Var,我需要一些东西,比如: var myList; foreach (MyObject myObject in myObjects) { myList = myList.Union(myObject.Items.Cast<Item>()); } var-myList; foreach(MyObject中的MyObject MyObject) { myList=myList.Union(myObject.Items.Cast()); } 但我似乎无法初始化空变量。解决方案?v

我需要一些东西,比如:

var myList;

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

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

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

另外,当您在初始化myList之前试图访问它时(它应该是
null
),会抛出一个null异常。试试这个:

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

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

另外,当您在初始化myList之前试图访问它时(它应该是
null
),会抛出一个null异常。试试这个:

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

Union
返回与所需类型相同的类型,考虑到您在其中使用的是
IEnumerable
,然后:

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

Union
返回与所需类型相同的类型,考虑到您在其中使用的是
IEnumerable
,然后:

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

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

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

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

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

编译器无法知道要创建哪种类型,因此

var myList;
不足以告诉编译器myList的类型是什么。 你能行

List<Item> myList;
还是一个数不清的数字

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

编译器无法知道要创建哪种类型,因此

var myList;
不足以告诉编译器myList的类型是什么。 你能行

List<Item> myList;
还是一个数不清的数字

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

这不是联合的问题,而是试图读取任何未初始化的局部变量的问题

您可以使用:

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

。。。或者只需使用mattytommo所示的
SelectMany
,可能还需要调用
Distinct()
,以获得不同的元素(就像
Union
那样)。

这不是
Union
的问题,而是试图读取任何未初始化的局部变量的问题

您可以使用:

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

。。。或者只需使用mattytommo所示的
SelectMany
,可能还需要调用
Distinct()
来获取不同的元素(就像
Union
那样)。

我不会将其描述为“惰性评估”-这是类型推断。很好!也适用于
var myList=myObjects.SelectMany(m=>m.Items.Cast())
@markzzz是的,你可以保留
var
,只要你先给它赋值:)我不会把它描述为“惰性评估”——它是类型推断。很好!也适用于
var myList=myObjects.SelectMany(m=>m.Items.Cast())
@markzzz是的,你可以保留
var
,只要你先给它赋值:)