Dav*_*itt 8 c# generics struct class equals
可能重复:
不能将运算符==应用于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");
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
如果我限制TValue到class,我可以使用Object.Equals().既然我需要这个结构和类,我会很高兴,如果我可以避免这一点.
所以问题是,如何比较相同但不受约束的泛型类型的两个元素的相等性?
Ser*_*ian 12
你尝试过这样的事吗?
public class Example<TValue>
{
private TValue _value;
public TValue Value
{
get { return _value; }
set
{
if (!object.Equals(_value, value))
{
_value = value;
OnPropertyChanged("Value");
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
三种选择:
IEquatable<TValue>然后调用x.Equals(y)IEqualityComparer<TValue>并使用它EqualityComparer<TValue>.Default进行比较您总是可以混合和匹配选项2和3,当然 - 默认为默认比较器,但也允许提供特定的比较器.