gpt4 book ai didi

.net - EqualityComparer.Default.Equals() 返回错误结果还是什么?

转载 作者:行者123 更新时间:2023-12-01 02:40:50 25 4
gpt4 key购买 nike

最佳答案

好吧,问题(无论对错)不在 EqualityComparer<Uri>.Default .它调用 Uri.Equals()正如它应该。

现在,Uri.Equals()仅忽略片段的差异。在很多情况下这是合适的。在很多情况下并非如此。就我个人而言,我不会将它作为默认设置,但是由于我不是编码它的人,因此我可能不知道有什么令人信服的理由让事物保持现状。

请注意,这是记录在案的。

其他决定也是有争议的(它忽略主机组件上的大小写差异与许多关于 URI 的实际问题相匹配,但不是在某些规范中如何定义 URI 相等性)。

如果您需要比这更严格的平等,我建议您定义自己的比较器:

public class UriStictEqualityComparer : IEqualityComparer<Uri>
{
public bool Equals(Uri x, Uri y)
{
return ReferenceEquals(x, y)
||
(
x != null
&&
y != null
&&
x.IsAbsoluteUri == y.IsAbsoluteUri
&&
x.ToString() == y.ToString()
);
}
public int GetHashCode(Uri obj)
{
return obj == null ? 0 : obj.ToString().GetHashCode();
}
}

尽管如此,您可能会发现您希望上述某些情况下认为不相等的情况也相等。例如。需要考虑punycode和non-punycode版本是否相同,转义的非特殊字符是否应该转义等等。乌里的 Compare在这种情况下,方法可能是有益的。

关于.net - EqualityComparer<Uri>.Default.Equals() 返回错误结果还是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8468930/

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