【发布时间】:2014-05-01 17:10:53
【问题描述】:
我们的大部分领域对象都有一个基类:
public class AbstractEntity<TKey>
{
public virtual TKey ID { get; set; }
}
现在,例如,我有 MobileOperator : AbstractEntity<int> 的课程。
我想做的是为所有 AbstractEntity 后代编写通用相等比较器。我想这样创建它:
var comparer = new AbstractEntityComparer<MobileOperator>();
我声明这个比较器如下:
public class AbstractEntityEqualityComparer<TAbstractEntity, TId> : IEqualityComparer<TAbstractEntity>
where TAbstractEntity : AbstractEntity<TId>
但是,在这种情况下,我必须明确告诉编译器 TId = int:new AbstractEntityComparer<MobileOperator, int>()。如果我输入 long 而不是 int,它就不会编译。因此,毫无疑问,编译器有办法确定我使用哪种类型来创建 MobileOperator。
那么有没有可能以一种不会让我一直写这个多余的int 的方式来编写比较器?如果是,我该怎么做?
【问题讨论】:
-
不,这是不可能的。见here。
标签: c# .net generics type-parameter