Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何定义这个';var';正式打字?_C#_Linq_Anonymous Types - Fatal编程技术网

C# 如何定义这个';var';正式打字?

C# 如何定义这个';var';正式打字?,c#,linq,anonymous-types,C#,Linq,Anonymous Types,此代码: var items = query.ToList(); 返回ListNothing,因为它是匿名类型的列表。之所以选择术语“匿名类型”,是因为该类型没有名称 如果希望能够使用显式类型,请不要使用匿名类型。要么创建自己的类型,要么(在C#7中)使用C#tuple类型。(常规的System.Tuple类型不允许保留所需的名称。)您的查询将返回一个,因此您在编译时不知道类型名称。如果要将var项目删除为自定义类型而不是匿名类型 如果需要删除var并了解其类型,则不要使用匿名类型。看看:

此代码:

var items = query.ToList();

返回
ListNothing,因为它是匿名类型的列表。之所以选择术语“匿名类型”,是因为该类型没有名称


如果希望能够使用显式类型,请不要使用匿名类型。要么创建自己的类型,要么(在C#7中)使用C#tuple类型。(常规的
System.Tuple
类型不允许保留所需的名称。)

您的查询将返回一个,因此您在编译时不知道类型名称。如果要将
var
项目删除为自定义类型而不是匿名类型

如果需要删除
var
并了解其类型,则不要使用匿名类型。看看:


要按照您的注释使用一些东西:
List<{stringa1,stringa2}>
查看C#7.0中的命名元组。你在下面或下面看一下

大致如下:

List(string a1, string a2) result = (from item from collection
                                    select new (string a1, string a2) 
                                        { "firstString", "secondString" }).ToList();

关于匿名类型的一点是,它们在设计时(编写代码时)不可用。在编译代码时,它们将被编译器隐藏在某个地方。它们有一个名称,并且经过适当的设计,但在设计时设计无法访问这些类型

这就是为什么要使用
var
;让编译器知道这实际上是什么类型,因为编译器是这里唯一可以告诉您类型“在哪里”的实例


如果您可以在设计时用真实的东西替换
var
,那么您也可以用
new{…}
替换
newwhich{…}
,这将使该类型不再匿名因此,如果您想使用类型而不是
var
,请自己定义一个实际的类型。记住,不管怎样,这样做实际上与编译器为您所做的事情没有区别;现在编写类声明的是您。

唯一可能的方法是将结果向下转换到
列表的非匿名祖先。您无法在编译时确定匿名类型。这是增加
var
的主要原因。您可以将匿名类型替换为
Tuple
或自定义类。@juharr我认为更安全的说法是
var
只存在于可在编译时确定的类型中(尝试将其与不能确定的类型一起使用)。IIRC它比匿名类型早一两个版本。@EdPlunkett是的,我的措辞应该在编译时之前。你不能使用类似的东西吗
列表<{string a1,string a2}>
`实际上,我只是想用一种简单的方法把它变成一个类变量,而不是一个局部变量。我可以用一个循环将它重新处理成一个不同的结构,我只是认为可能有一个过于简单的方法。@Nicholas-不需要重新处理它。也许可以用query@Nicholas:不,不能声明使用匿名类型作为类型参数的变量。
IList items = query.ToList();