为什么我在这里需要'class'约束

时间:2015-07-17 07:17:12

标签: c# generics generic-constraints

鉴于以下示例,我收到以下编译器错误:
 Cannot apply operator '==' to type 'TEnumerable' and 'TEnumerable'

class MyClass<TEnumerable, TItem> where TEnumerable : IEnumerable<TItem>
{
  public void DoSomething(TEnumerable item)
  {
    if (item == default(TEnumerable)) return; // Compiler error here
  }
}

当我添加class约束

class MyClass<TEnumerable, TItem> where TEnumerable : class, IEnumerable<TItem>

按预期编译。


根据MSDN,class约束意味着:

  

type参数必须是引用类型;这也适用于任何   class,interface,delegate或array type。

但是IEnumerable<TItem>已经是reference type(所有接口都是引用类型),因此class约束不会增加进一步的限制。所以我的问题是:为什么我需要这个约束?

0 个答案:

没有答案