Вам нужен ключевой класс для диктатора, который правильно реализует gethashcode. И вы можете расширять прошение, чтобы вы могли получить доступ к нему по-дружески.
класс пары ключей
public class KeyPair<Tkey1, Tkey2>
{
public KeyPair(Tkey1 key1, Tkey2 key2)
{
Key1 = key1;
Key2 = key2;
}
public Tkey1 Key1 { get; set; }
public Tkey2 Key2 { get; set; }
public override int GetHashCode()
{
return Key1.GetHashCode()^Key2.GetHashCode();
}
public override bool Equals(object obj)
{
KeyPair<Tkey1, Tkey2> o = obj as KeyPair<Tkey1, Tkey2>;
if (o == null)
return false;
else
return Key1.Equals(o.Key1) && Key2.Equals(o.Key2);
}
}
расширить справочник <>
public class KeyPairDictonary<Tkey1, Tkey2, Tvalue>
: Dictionary<KeyPair<Tkey1, Tkey2>, Tvalue>
{
public Tvalue this[Tkey1 key1, Tkey2 key2]
{
get
{
return this[new KeyPair<Tkey1, Tkey2>(key1, key2)];
}
set
{
this[new KeyPair<Tkey1, Tkey2>(key1, key2)] = value;
}
}
}
и использовать его как этот
KeyPairDictonary<int, bool, string> dict =
new KeyPairDictonary<int, bool, string>();
dict[1, false] = "test";
string test = dict[1, false];
Не забывайте, что вам нужно переопределить GetHashCode и Equals, чтобы использовать это в Hashtable. –
@ Давид, не в этом случае. По умолчанию реализация Equals будет выполнять равенство во всех полях, которые будут работать в этом случае. GetHashcode может быть не так эффективен, как хотелось бы пользователю, но он также будет работать с реализацией по умолчанию. – JaredPar
@ Давид, это, как говорится, обычно является хорошей практикой на самом деле. – JaredPar