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