gpt4 book ai didi

c# - 比较对象?

转载 作者:太空狗 更新时间:2023-10-29 22:08:39 25 4
gpt4 key购买 nike

我只需要做一个简单的比较即

byte[] keya = System.Text.Encoding.ASCII.GetBytes("myFamilyColumn:1");
byte[] keyb = System.Text.Encoding.ASCII.GetBytes("myFamilyColumn:1");
Console.WriteLine(keya == keyb);

但是结果是假的,而且他们的哈希码也不一样,我是不是漏掉了什么?

提前致谢!

最佳答案

我认为框架中没有任何东西可以按照您想要的方式提供数组相等性。然而,编写自己的 IEqualityComparer<T> 实现并不难。对于数组。例如(已编译但未经测试):

public static class ArrayEqualityComparer
{
public static IEqualityComparer<T[]> Create<T>(
IEqualityComparer<T> comparer)
{
return new ArrayEqualityComparer<T>(comparer);
}
}

public sealed class ArrayEqualityComparer<T> : IEqualityComparer<T[]>
{
private static readonly IEqualityComparer<T[]> defaultInstance = new
ArrayEqualityComparer<T>();

public static IEqualityComparer<T[]> Default
{
get { return defaultInstance; }
}

private readonly IEqualityComparer<T> elementComparer;

public ArrayEqualityComparer() : this(EqualityComparer<T>.Default)
{
}

public ArrayEqualityComparer(IEqualityComparer<T> elementComparer)
{
this.elementComparer = elementComparer;
}

public bool Equals(T[] x, T[] y)
{
if (x == y)
{
return true;
}
if (x == null || y == null)
{
return false;
}
if (x.Length != y.Length)
{
return false;
}
for (int i = 0; i < x.Length; i++)
{
if (!elementComparer.Equals(x[i], y[i]))
{
return false;
}
}
return true;
}

public int GetHashCode(T[] array)
{
if (array == null)
{
return 0;
}
int hash = 23;
foreach (T item in array)
{
hash = hash * 31 + elementComparer.GetHashCode(item);
}
return hash;
}
}

(请注意,这目前假设 elementComparer 将处理 GetHashCodeEquals 的空值。接口(interface)不保证这一点,但默认的相等比较器实际上处理它。您可以修改上面的代码以使其更健壮,当然......我现在没有时间。)

用法:

IEqualityComparer<byte[]> x = ArrayEqualityComparer<byte>.Default;
bool equal = x.Equals(bytes1, bytes2);

IEqualityComparer<string[]> y =
ArrayEqualityComparer.Create(StringComparer.OrdinalIgnoreCase);
bool whatever = x.Equals(new[][] { "X", "Y" }, new[] { "x", "y" });

关于c# - 比较对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4598368/

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