c# – 通用约束:我可以测试可以是引用还是值类型的泛型的平等?

我想要一个可以接受引用或值类型的通用类,只能基于相等性测试执行操作.考虑以下几点:
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生成解决方案.有没有一个简单的解决方案,我错过了这里?

解决方法

最好的办法是一般为 EqualityComparer<T>.Default
public void SetValue(ObservableObject owner,TProp value)
{
   if (!EqualityComparer<TProp>.Default.Equals(Value,value))
   {
       // ... set the property
   }
}

请注意,这甚至以逻辑方式为您处理空值(null等于null但没有其他).

相关文章

在要实现单例模式的类当中添加如下代码:实例化的时候:frmC...
1、如果制作圆角窗体,窗体先继承DOTNETBAR的:public parti...
根据网上资料,自己很粗略的实现了一个winform搜索提示,但是...
近期在做DSOFramer这个控件,打算自己弄一个自定义控件来封装...
今天玩了一把WMI,查询了一下电脑的硬件信息,感觉很多代码都...
最近在研究WinWordControl这个控件,因为上级要求在系统里,...