在C#中,byte数组可以作为哈希键,只要符合哈希键的要求。哈希键必须是不可变的,并且需要实现GetHashCode()和Equals()方法。在使用byte数组作为哈希键时,可以自定义一个类来包装byte数组,并实现这些方法。例如:
public class ByteArrayKey
{
private byte[] key;
public ByteArrayKey(byte[] key)
{
this.key = key;
}
public override int GetHashCode()
{
unchecked
{
int hash = 17;
foreach (byte b in key)
{
hash = hash * 31 + b.GetHashCode();
}
return hash;
}
}
public override bool Equals(object obj)
{
if (obj is ByteArrayKey other)
{
return key.SequenceEqual(other.key);
}
return false;
}
}
然后可以使用这个ByteArrayKey类作为哈希键,例如:
var dictionary = new Dictionary<ByteArrayKey, string>();
byte[] key1 = new byte[] { 0x01, 0x02, 0x03 };
byte[] key2 = new byte[] { 0x04, 0x05, 0x06 };
dictionary[new ByteArrayKey(key1)] = "Value1";
dictionary[new ByteArrayKey(key2)] = "Value2";
Console.WriteLine(dictionary[new ByteArrayKey(key1)]); // Output: Value1
Console.WriteLine(dictionary[new ByteArrayKey(key2)]); // Output: Value2
这样就可以使用byte数组作为哈希键了。