C# 如何:显式匿名声明

C# 如何:显式匿名声明,c#,linq,anonymous-types,C#,Linq,Anonymous Types,如何从查询中定义并显式告诉编译器我想要一个匿名类型的列表 我不想使用“var”关键字 下面是一个例子: List<string> query = // Explicit getting a List<string> (from l in listTest select l).ToList(); List query=//显式获取列表 (从列表测试中的l开始) 选择l).ToList(); 这就是我想做的: var query2 = // I would like

如何从查询中定义并显式告诉编译器我想要一个匿名类型的列表

我不想使用“var”关键字

下面是一个例子:

List<string> query =    // Explicit getting a List<string>
(from l in listTest
select l).ToList();
List query=//显式获取列表
(从列表测试中的l开始)
选择l).ToList();
这就是我想做的:

var query2 = // I would like to use List<´a> instead of var
(from l in listTest
select new
{
_string = l,
Lenght = l.Length
}).ToList();
var query2=//我想使用List而不是var
(从列表测试中的l开始)
选择新的
{
_字符串=l,
长度=l.长度
}).ToList();

将该局部变量的类型定义为此类列表的实际类型的唯一可能方法是使用
var
。您可以将变量键入派生程度较低的类型,例如使用
IList
(非泛型版本)或
object
dynamic
,但鉴于匿名类型没有名称,因此无法显式命名该类型。如果需要这样做,则需要使用命名类型而不是未命名类型

当然,如果您在技术上不想使用局部变量,您可以使用一个泛型方法来执行操作,允许您使用泛型方法推断而不是局部变量类型推断来键入标识符。使用
使用
方法:

public static void Use<T>(T item, Action<T> action)
{
    action(item);
}

您现在有了一个标识符(从技术上讲,它是一个方法的参数,而不是一个局部的)作为该列表的确切类型键入,而不使用
var

将该局部变量的类型定义为该列表的实际类型的唯一可能方法是使用
var
。您可以将变量键入派生程度较低的类型,例如使用
IList
(非泛型版本)或
object
dynamic
,但鉴于匿名类型没有名称,因此无法显式命名该类型。如果需要这样做,则需要使用命名类型而不是未命名类型

当然,如果您在技术上不想使用局部变量,您可以使用一个泛型方法来执行操作,允许您使用泛型方法推断而不是局部变量类型推断来键入标识符。使用
使用
方法:

public static void Use<T>(T item, Action<T> action)
{
    action(item);
}

您现在有了一个标识符(从技术上讲,它是一个方法的参数,而不是一个局部的)作为该列表的确切类型键入,而不使用
var

将该局部变量的类型定义为该列表的实际类型的唯一可能方法是使用
var
。您可以将变量键入派生程度较低的类型,例如使用
IList
(非泛型版本)或
object
dynamic
,但鉴于匿名类型没有名称,因此无法显式命名该类型。如果需要这样做,则需要使用命名类型而不是未命名类型

当然,如果您在技术上不想使用局部变量,您可以使用一个泛型方法来执行操作,允许您使用泛型方法推断而不是局部变量类型推断来键入标识符。使用
使用
方法:

public static void Use<T>(T item, Action<T> action)
{
    action(item);
}

您现在有了一个标识符(从技术上讲,它是一个方法的参数,而不是一个局部的)作为该列表的确切类型键入,而不使用
var

将该局部变量的类型定义为该列表的实际类型的唯一可能方法是使用
var
。您可以将变量键入派生程度较低的类型,例如使用
IList
(非泛型版本)或
object
dynamic
,但鉴于匿名类型没有名称,因此无法显式命名该类型。如果需要这样做,则需要使用命名类型而不是未命名类型

当然,如果您在技术上不想使用局部变量,您可以使用一个泛型方法来执行操作,允许您使用泛型方法推断而不是局部变量类型推断来键入标识符。使用
使用
方法:

public static void Use<T>(T item, Action<T> action)
{
    action(item);
}


您现在有了一个标识符(从技术上讲,它是一个方法的参数,而不是一个本地的)作为该列表的确切类型键入,而不使用
var

,这是不可能的,因为您使用的是匿名类型。如果要定义显式类型,请。。好。。您需要一个类型。这与匿名类型完全相反。匿名意味着您不知道该类型的名称。当您不应该知道类型的名称时,您希望如何将该类型引入编译器?这就是为什么会出现
var
。为什么要尝试避免var?这是不可能的,因为您使用的是匿名类型。如果要定义显式类型,请。。好。。您需要一个类型。这与匿名类型完全相反。匿名意味着您不知道该类型的名称。当您不应该知道类型的名称时,您希望如何将该类型引入编译器?这就是为什么会出现
var
。为什么要尝试避免var?这是不可能的,因为您使用的是匿名类型。如果要定义显式类型,请。。好。。您需要一个类型。这与匿名类型完全相反。匿名意味着您不知道该类型的名称。当您不应该知道类型的名称时,您希望如何将该类型引入编译器?这就是为什么会出现
var
。为什么要尝试避免var?这是不可能的,因为您使用的是匿名类型。如果要定义显式类型,请。。好。。您需要一个类型。这与匿名类型完全相反。匿名意味着您不知道该类型的名称。当您不应该知道类型的名称时,您希望如何向编译器引入该类型?这就是为什么出现了
var
。为什么要避免var?警告:虽然使用
IList
会起作用,但它会破坏匿名类型的全部意义,因为现在无法访问
\u字符串
长度。警告: