【发布时间】:2019-12-13 11:25:03
【问题描述】:
我有一个看起来像这样的通用方法:
public int GetCount<T>(T collection) where T: ICollection
{
return collection.Count;
}
现在我希望能够调用此方法,其中集合参数可以是List<T> 或HashSet<T>。当前代码无法实现这一点,因为我要传递的参数不继承 ICollection 接口。现在有什么方法可以通过简单的约束来实现吗?
【问题讨论】:
-
您在这里取得的哪些成就最好留给
Enumerable的Count扩展方法? -
它是一个更大的方法的一部分,它应该是完全通用的并且还应该返回长度。
-
在这种情况下,您仍然可以应用
IEnumerable.Count()实现的相同机制。您将类型约束纳入更广泛的类型(如IEnumerable),并在方法中尝试将其转换为更具体的类型以获得快速路径,并且只有在失败时才采用更广泛类型的慢速方法。例如,请查看Count() extension method。
标签: c# generics constraints generic-constraints