У нас есть базовый класс для большинства наших доменных объектов:
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
вещь всевремя?И если да, как я могу это сделать?