gpt4 book ai didi

c# - 类型安全的 Equals()

转载 作者:太空狗 更新时间:2023-10-29 18:36:07 24 4
gpt4 key购买 nike

由于我的(单元)测试覆盖率仍然很低,不幸的是,我不得不费力地找出很多错误。因此,在重构期间,我严重依赖 C# 编译器的类型检查。

今天,我修复了重构过程中遗漏一行 x.Equals(aThingWrappingOriginalThing) 的错误。因为它是 bool Equals(object T),所以编译器没有报错。然而,90% 的时间我直接使用 Equals()(而不是通过 BCL),我打算在逻辑上比较相同类型的对象。

现在我想知道为什么我从未见过有人为这种情况(在 C# 中)推广类型安全的 Equals() 版本。有这方面的最佳做法吗?

我很想为这些比较使用扩展方法,如下所示:

public static bool SafeEquals<T>(this T a, T b)
{
if (a == null) return b == null;
return a.Equals(b);
}
public static bool SafeEquals<X>(this IEquatable<X> a, IEquatable<X> b)
{
if (a == null) return b == null;
return a.Equals(b);
}

这些可以优化吗?

这是我找到的关于 java 主题的唯一一篇博文: http://rickyclarkson.blogspot.com/2006/12/making-equalsobject-type-safe.html

最佳答案

你在找

EqualityComparer<T>.Default.Equals(x,y);

这支持 IEquatable<T> (如果实现),否则使用潜在装箱 Equals(object) ;它支持类和结构,两者都具有预期的空行为,包括对 Nullable<T> 的支持(没有装箱)。

关于c# - 类型安全的 Equals(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11421197/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com