我想要一个通用的类,既可以接受引用类型也可以接受值类型,并且只根据相等测试执行操作。考虑以下内容:
public class Property<TProp>
where TProp : struct, IEquatable<TProp>
{
public TProp Value;
public void SetValue(ObservableObject owner, TProp value)
{
if (!Value.Equals(value)) // cannot use != on struct constrained TProp
{
// ... set the property
}
}
}
public class ByRefProperty<TProp>
where TProp : class // Dont want to require IEquatable<> on reference type TProp
{
public TProp Value;
public void SetValue(ObservableObject owner, TProp value)
{
if (Value != value)
{
// ... set the property
}
}
}
我必须使用泛型约束和两个类来测试值类型的相等性和引用类型的相等性。有没有什么方法可以绕过这个问题,以便最终只需一个类?
我不想使用装箱值类型、反射或运行时IL生成的解决方案。我是否错过了一些简单的解决方案?
IEquatable<T>
实现中定义的任何自定义 Equals 逻辑吗? - Justin Niessner