Можно создать дубликат:
Can’t operator == be applied to generic types in C#?Как сравнить два элемента одного и того же, но неограниченного общего типа для равенства?
У меня есть следующий общий класс и компилятор жалуется, что "Operator '!=' cannot be applied to operands of type 'TValue' and 'TValue'
" (см CS0019):
public class Example<TValue>
{
private TValue _value;
public TValue Value
{
get { return _value; }
set
{
if (_value != value) // <<-- ERROR
{
_value= value;
OnPropertyChanged("Value");
}
}
}
}
Если я constrain TValue
до class
, я мог бы использовать Object.Equals()
. Поскольку мне это нужно для обеих структур и классов, я был бы очень счастлив, если бы мог это избежать.
Итак, вопрос в том, как я могу сравнить два элемента одного и того же, но неограниченного общего типа для равенства?
Почему вы не можете использовать .Equals для типов значений? – 2008-12-03 11:52:02
По умолчанию, если вы вызываете «object.Equals (a, b)» в ссылочных типах, тогда вызывается «object.ReferenceEquals (a, b)». – TcKs 2008-12-03 11:55:36
@TcKs: По умолчанию вы не можете быть уверены, что Equals был переопределен в производном классе. – leppie 2008-12-03 12:52:58