0

我如何从查询中定义并明确告诉编译器我想要一个 AnonymousType 列表?

我不想使用“var”关键字

如下示例:

List<string> query =    // Explicit getting a List<string>
(from l in listTest
select 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();
4

1 回答 1

3

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

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

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

Use(from l in listTest
    select new
    {
        _string = l,
        Lenght = l.Length
    },
    query => Console.WriteLine(string.Join("\n", query)));

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

于 2013-10-15T18:22:31.407 回答