2

C# で Windows ランタイム コンポーネントを作成しています。一部の型に IEquatable インターフェイスを実装したいと考えています。Equals メソッドをコンポーネントのコンシューマーに公開する必要はありません。単体テストでインスタンス間を比較できるようにしたいだけです。IEquatable はジェネリック型であるため、実装できません。最良の代替手段は何ですか?

4

2 に答える 2

2

残念ながら、2 つの winrt 型の間で詳細な比較を実装するメカニズムはありません :(.

于 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 Framework は、ToString()、Equals(Object)、および GetHashCode の既定の実装を WinRT 型に提供します。

デフォルトの 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 に答える