如何使C#Windows运行时组件类型相等?

时间:2013-08-08 15:03:53

标签: windows-runtime

我正在用C#编写Windows运行时组件。 我想在我的一些类型中实现IEquatable接口。我不需要将Equals方法暴露给组件的使用者,我只是希望我的单元测试能够在实例之间进行比较。 不允许实现IEquatable,因为它是泛型类型。什么是最好的选择?

2 个答案:

答案 0 :(得分:2)

不幸的是,没有机制可以实现两种winrt类型之间的深度比较:(。

答案 1 :(得分:0)

根据https://msdn.microsoft.com/EN-US/library/bsc2ak47(v=vs.110).aspx?cs-save-lang=1&cs-lang=csharp

.Net Framework为ToString(),Equals(Object)和GetHashCode提供WinRT类型的默认实现。

当默认的EqualityComparer用于未实现IEquatable的类型时,它默认为Equals(Object)。

因此,要模仿IEquatable的WinRT类型,您只需要覆盖类型上的Object.Equals。这要求您也覆盖GetHashCode。

以下是一个示例类:

using System;

public sealed class BindableInt
{
  public BindableInt(int i = 0)
  {
   Value = i;
  }
  public int Value { get; set; }
  public string String
  {
    get 
    {
      return Value.ToString();
    }
  }
  public override bool Equals(object obj)
  {
    if (!(obj is BindableInt)) return false;
      return Value.Equals(((BindableInt)obj).Value);
  }
  public override int GetHashCode()
  {
    return Value.GetHashCode();
  }
}