如何:显式匿名声明

时间:2013-10-15 18:06:37

标签: c# linq anonymous-types

如何定义并显式告诉编译器我想从查询中获取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();

1 个答案:

答案 0 :(得分:2)

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

当然,如果您在技术上不想使用局部变量,则可以使用一个通用方法,该方法采用一种操作来允许您使用泛型方法推断而不是局部变量类型推断来键入您的标识符。使用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