2

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

4

2 回答 2

2

Unfortunately there is no mechanism for implementing deep comparison between two winrt types :(.

于 2013-08-10T20:51:43.290 回答
0

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

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

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

因此,要为 WinRT 类型模拟 IEquatable,您只需要在您的类型上覆盖 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();
  }
}
于 2016-01-27T06:00:09.687 回答