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