У меня есть флаг типа Enum с побитовым представлением для каждого элемента, как показано ниже
[DataContract]
[Flags]
public enum TestProduct : long
{
[EnumMember]
A1 = 0x1,
[EnumMember]
A2 = 0x2,
[EnumMember]
A3 = 0x4,
[EnumMember]
A4 = 0x8,
[EnumMember]
A5 = 0x40,
[EnumMember]
A6 =0x4000000000,
}
Я создал это как Flags Enum, потому что мне нужно сохранить комбинацию этих записей.Проблема, с которой я здесь сталкиваюсь, у меня есть общий код для проверки HasCode, а затем выполнить некоторую операцию, если HashCode не равен нулю.
Здесь в этом случае я получаю то же значение кода Has, возвращаемое для элементов A5 иA6, который возвращается как 64 (двоичное значение для 0x40).
И если у меня есть комбинация A5 и A6, это дает мне хэш-код ноль.Может кто-нибудь, пожалуйста, посоветуйте, как я могу справиться с этой ситуацией, чтобы избежать получения нулевого значения для этой комбинации, и почему оба дают одинаковый хэш-код, как у A5.
Ниже код показывает, как он представлен.
static void Main(string[] args)
{
Console.Write("Hash Code for A5 is ");
Console.WriteLine(Enums.TestProduct.A5.GetHashCode());
Console.Write("Hash Code for A6 is ");
Console.WriteLine(Enums.TestProduct.A6.GetHashCode());
Console.Write("Hash Code for A6 | A5 is ");
Console.WriteLine((Enums.TestProduct.A6 | Enums.TestProduct.A5).GetHashCode());
Console.ReadLine();
}
И результат для этого следующий: