如果您查看 的声明IGrouping
,
public interface IGrouping<out TKey,out TElement> : System.Collections.Generic.IEnumerable<out TElement>
你可以看到它说“IGrouping<TKey, TElement>
是一种IEnumerable<TElement>
”。
这是一种特殊的IEnumerable<TElement>
. 特别在什么方面?它有一个Key
关联。
不,这不是有效的 C# 语法:
interface IGrouping<out TKey, out IEnumerable<TElement>>
请记住,这是一个接口声明,在 中<>
,它声明了接口的类型参数,它们是标识符。IEnumerable<TElement>
不是有效的标识符。您似乎还想引用现有的 interface System.Collections.Generic.IEnumerable<T>
,但是将其放在声明中的这个位置是没有意义的,interface Foo<List<T>>
就像在 Java 中编写为 interface 声明没有意义一样。
如果你的意思是:
interface IGrouping<out TKey, out TElement> where TElement : IEnumerable
这可以工作,并且有很多方法可以设计这个IGrouping
界面。以下方式可能对您最有意义?
interface IMyGrouping<TKey, TElement> {
TKey Key { get; }
IEnumerable<TElement> Elements { get; }
}
但是.NET框架的设计真正棒的地方在于它实现了一个现有的接口,并且可以直接作为一个接口使用IEnumerable<TElement>
,这是一个非常强大的东西。如果您的类具有接口承诺的能力,请实现该接口。另请参阅。
以下是否意味着 GroupBy 使用的 ILookup 具有多个键与多个值的关联?
是的。由于ILookup
implementsIEnumerable<IGrouping>
和IGrouping
implements有点像a (IEnumerable
请原谅我在这里非常松散地使用泛型符号)。所以一个可枚举的可枚举,即像一个二维数组。不同之处在于,每个内部“数组”都有一个,因为内部“数组”实际上是s。ILookup
IEnumerable<IEnumerable>
ILookup
Key
IGrouping