我有以下代码:
List<string> myCars = new List<string>()
{ "Mercury Cougar", "Dodge Dart", "Ford Taurus SHO",
"Dodge Charger", "Chevrolet Blazer", "Dodge Neon" };
var dodges = from someCars in myCars
where someCars.Contains("Dodge")
orderby someCars descending
select someCars;
Console.WriteLine(dodges.GetType()); //System.Linq.OrderedEnumerable`2[System.String,System.String]
dodges.GetType()
以CIL语法返回完全限定名称。
如果我将其翻译为C#并使用它来替换{{1}},则不会编译:
类型或命名空间名称&#39; OrderedEnumerable&lt;,&gt;&#39;在...中不存在 命名空间&#39; System.Linq&#39; (你错过了一个程序集引用吗?)
var
这是因为System.Linq.OrderedEnumerable<string, string> dodges = from someCars in myCars
where someCars.Contains("Dodge")
orderby someCars descending
select someCars;
不可用,只有OrderedEnumerable<string, string>
可用。
为什么System.Linq.IOrderedEnumerable<string>
无效?
答案 0 :(得分:2)
为什么
OrderedEnumerable<string, string>
无法使用
因为它是界面的“内部”命令。没有理由为什么它应该可用或记录。使用LINQ,您应该针对接口进行编程(IEnumerable<>
,IOrderedEnumerable<>
,IQueryable<>
...)
如果你看一下,所有LINQ方法都返回一个从这些接口之一派生的内部类,并且通常它们可以返回多个不同类的实例,具体取决于输入。例如,Enumerable.Select()
可以返回new SelectListIterator<TSource, TResult>
或SelectIListIterator<TSource, TResult>
或new SelectIPartitionIterator<TSource, TResult>
或其他各种类,具体取决于IEnumerable<>
输入的类型。