【问题标题】:What is so special about IComparable<> as a Generic ConstraintIComparable<> 作为通用约束有什么特别之处
【发布时间】:2019-03-07 11:22:24
【问题描述】:

假设我有一堂课

Class Apple<T> where T: IComparable<int>{}

现在在为 Apple 创建对象时,我会这样做

Apple<int> obj = new Apple<int>();

上面的代码可以工作。

如果我用任何其他通用接口(如IComparer&lt;&gt;IEnumerable&lt;&gt; 等)替换相同的代码。像上面这样的对象创建将不起作用,我们必须像这样声明它

Apple<IEnumerable<int>> obj = new Apple<IEnumerable<int>>();

为什么会这样?为什么我为IComparable&lt;&gt; 声明的方式只适用于它而不适用于任何其他接口?

【问题讨论】:

    标签: c# .net generics generic-constraints


    【解决方案1】:

    IComparable&lt;T&gt; 没有什么特别之处,只是 T 本身,它 - 在 int 的情况下 - 也实现了 IComparable&lt;int&gt;。但是int 肯定没有实现IEnumerable&lt;int&gt;

    或者换句话说:您当然可以比较每个int 与另一个int。但是,您不能迭代 int

    【讨论】:

      猜你喜欢
      • 2021-06-19
      • 2011-04-18
      • 2017-02-19
      • 2016-09-30
      • 2010-10-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多