【问题标题】:Generic constrain for Lists and Collections列表和集合的通用约束
【发布时间】:2019-12-13 11:25:03
【问题描述】:

我有一个看起来像这样的通用方法:

public int GetCount<T>(T collection) where T: ICollection
{
   return collection.Count;    
}

现在我希望能够调用此方法,其中集合参数可以是List&lt;T&gt;HashSet&lt;T&gt;。当前代码无法实现这一点,因为我要传递的参数不继承 ICollection 接口。现在有什么方法可以通过简单的约束来实现吗?

【问题讨论】:

  • 您在这里取得的哪些成就最好留给EnumerableCount 扩展方法?
  • 它是一个更大的方法的一部分,它应该是完全通用的并且还应该返回长度。
  • 在这种情况下,您仍然可以应用 IEnumerable.Count() 实现的相同机制。您将类型约束纳入更广泛的类型(如IEnumerable),并在方法中尝试将其转换为更具体的类型以获得快速路径,并且只有在失败时才采用更广泛类型的慢速方法。例如,请查看Count() extension method

标签: c# generics constraints generic-constraints


【解决方案1】:

为什么不:

public int GetCount<T>(ICollection<T> collection)
{
   return collection.Count;    
}

【讨论】:

  • 他们确实实现了ICollection&lt;T&gt; 接口。我会试一试。
  • @HimBromBeere typeof(ICollection) != typeof(ICollection&lt;T&gt;)
猜你喜欢
  • 2017-03-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多