加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-15 04:28:14 所属栏目:百科 来源:网络整理
导读:我想要一个可以接受引用或值类型的通用类,只能基于相等性测试执行操作.考虑以下几点: public class PropertyTProp where TProp : struct,IEquatableTProp{ public TProp Value; public void SetValue(ObservableObject owner,TProp value) { if (!Value.Equ
我想要一个可以接受引用或值类型的通用类,只能基于相等性测试执行操作.考虑以下几点:
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但没有其他).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读