Ваша проблема в том, что вы используете массивы в качестве ключей в хэш-таблице. Просто чтобы проиллюстрировать, что здесь происходит не так:
PS Home:\> $x=$false,$false
PS Home:\> $y=@($binary.Keys)[0]
PS Home:\> $x
False
False
PS Home:\> $y
False
False
PS Home:\> $x.Equals($y)
False
Оба объекта также имеют разные хэш-коды. Их никогда не будет хорошей идеей использовать в качестве ключей в хеш-таблицах, поскольку вы не сможете извлечь значения снова, если не будете использовать те же самые ссылки, которые вы вставили в хеш-таблицу.
Возможно, проще было бы использовать один объект в качестве ключа:
$binary = @{
0 = "!A and !B"
1 = "!A and B"
10 = "A and !B"
11 = "A and B"
}
или аналогичный. Затем извлечение
$binary[01]
даст "!A and B"
, как и ожидалось.
Обратите внимание, что у List будет та же проблема с равенством. Кортежи могут работать, но они недоступны в .NET 2.