鉴于以下示例,我收到以下编译器错误:
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
约束不会增加进一步的限制。所以我的问题是:为什么我需要这个约束?