【发布时间】:2018-10-30 17:59:21
【问题描述】:
我有以下代码:
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# 并用它来替换 var,它不会编译:
类型或命名空间名称“OrderedEnumerable”不存在于 命名空间“System.Linq”(您是否缺少程序集引用?)
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> 可用。
为什么OrderedEnumerable<string, string> 不可用?
【问题讨论】:
-
这是
IOrderedEnumerable<string>,而不是OrderedEnumerable<string, string>。 -
"it doesn't compile" :始终在您的问题中包含错误消息。
-
我打赌你也在寻找
IOrderedEnumerable<T>。OrderedEnumerable<TElement, TKey>被声明为internal并实现IOrderedEnumerable<T>,如here 所示。 -
@Backwards_Dave,正如其他人所指出的,
OrderedEnumerable<TElement, TKey>是一个 internal 类,它继承自内部 abstract 类OrderedEnumerable<TElement>,它实现IOrderedEnumerable<TElement>接口。 -
为什么 OrderedEnumerable
不可用 因为它是接口的“内部”实现。没有理由应该提供或记录它。使用 LINQ,您应该针对接口(@987654341@、IOrderedEnumerable<>、IQueryable、IQueryable<>)进行编程