我有来自Microsoft的以下代码示例(http://msdn.microsoft.com/en-us/library/bb534869.aspx):
String[] fruits = {"apple", "banana", "mango", "orange", "passionfruit", "grape" };
var query = fruits.Select((fruit, index)
=> new {Substring = fruit.Substring(0, index)});
foreach (var obj in query)
Console.WriteLine("{0}", obj);
这很有效,但我不明白的是什么类型的查询?
我试图从调试器中获取信息,但我无法声明它并明确地将其写下来。我尝试了几种变体,例如
IEnumerable<int,string> query = fruits.Select((fruit, index)
=> new {Substring = fruit.Substring(0, index)});
但这确实构建了。如何在不使用var?
的情况下显式定义查询类型答案 0 :(得分:7)
您无法指定类型,因为它是anonymous
。在这里阅读更多:
http://msdn.microsoft.com/en-us/library/bb397696.aspx
答案 1 :(得分:2)
当您使用没有特定类型的new运算符时,编译器会创建一个您无法显式引用的匿名类型。如果您希望能够引用它,那么您应该创建自己的类以显式返回,或者返回预先存在的类。尝试:
IEnumerable<string> query = fruits.Select((fruit, index) => fruit.Substring(0, index));
答案 2 :(得分:1)
为了完整性,如果你真的必须指定类型(并且确实没有必要 - 匿名类型就像类型安全一样)那么你必须首先声明一个类/ struct < / p>
public class FruitySubstringyThingy
{
public string Substring{get;set;}
}
并在投影
中使用它IEnumerable<FruitySubstringyThingy> items
= fruits.Select((fruit,index) => new FruitySubstringyThingy{Substring = fruit.Substring(0, index)});