Предположим, у вас есть следующая общая иерархия классов:
public abstract class GenericBase<T>
{
T SomeProperty{ get; set; }
}
public class Foo<T>
{
T SomeProperty{ get; set; }
}
public abstract class GenericChild<T> : GenericBase<T>
{
// ...
public bool DoSomething(Foo<T> foo)
{
// This is invalid:
return SomeProperty == foo.SomeProperty;
}
}
Проверка на равенство в методе DoSomething не будет компилироваться. Выдает следующую ошибку:
Operator '==' cannot be applied to operands of type 'T' and 'T'
Если это полезно, эти классы находятся в отдельных файлах. Как лучше всего разрешить такое сравнение на равенство? Есть ли какой-то шаблон или что-то такое, что позволяет это в C #?
Обновление:
В нескольких ответах предлагается использовать:
where T : SomeClass
К сожалению, очень часто T будет примитивным типом.