var x = new { a = "foobar", b = 42 };
List<x.GetType()> y;
有没有不同的方式来做我想做的事情?
如果没有,我真的看不出隐式类型有那么多意义......
var x = new { a = "foobar", b = 42 };
List<x.GetType()> y;
有没有不同的方式来做我想做的事情?
如果没有,我真的看不出隐式类型有那么多意义......
x.GetType()
是一个方法调用,在执行时评估。因此它不能用于像变量类型这样的编译时概念。我同意偶尔能够做类似的事情会非常方便(将变量的编译时类型指定为别处的类型参数),但目前你不能。我不能说我经常想念它。
但是,您可以这样做:
var x = new { a = "foobar", b = 42 };
var y = new[] { x };
var z = y.ToList();
您还可以编写一个简单的扩展方法来创建一个列表:
public static List<T> InList<T>(this T item)
{
return new List<T> { item };
}
(如果需要,请选择不同的名称:)
然后:
var x = new { a = "foobar", b = 42 };
var y = x.InList();
正如 Marc 所示,它实际上根本不必是扩展方法。唯一重要的是编译器可以使用类型推断来计算方法的类型参数,这样您就不必尝试命名匿名类型。
隐式类型化的局部变量有多种用途,但它们在 LINQ 中特别有用,因此您可以创建临时投影而无需显式创建全新类型。
使用通用方法可以做到这一点:
public static List<T> CreateList<T>(T example) {
return new List<T>();
}
...
var list = CreateList(x);
或者通过创建一个包含数据的列表然后清空它......