2014-10-10 3 views
-2

Мне нужен составной ключ (две строки) в качестве значения для словаря. Я думал, что могу использовать Tuple<string,string> для этого, но, как я понимаю, словарь выполнит контрольную проверку равенства, и я бы никогда не получил совпадение.Условное равенство для словаря

Что я могу сделать, чтобы выполнить фактическое сравнение строк?

Вот что я получил:

protected Dictionary<Tuple<string, string>, WopiSession> _sessions; 

... 

var sessionKey = new Tuple<string, string>(accessToken, fileToken); 
WopiSession session; 

if (!_sessions.TryGetValue(sessionKey, out session)) 
{ 
    session = new WopiSession(); 
    _sessions.Add(sessionKey, session); 
} 
+0

Почему вы не попробовали? – poke

+0

@poke Я собираюсь ... это сложная программа. Это будет еще час или около того, прежде чем я смогу проверить это. Я знал, что кто-то здесь будет отвечать от головы, но почему бы не спросить, прежде чем идти по неправильному пути? – mpen

+1

Возможный дубликат [Tuples (или массивов) в качестве словарных ключей в C#] (http://stackoverflow.com/questions/955982/tuples-or-arrays-as-dictionary-keys-in-c-sharp) – poke

ответ

2

Вам не нужно ничего делать. Tuple переопределяет семантику равенства по умолчанию object вместо этого, чтобы создать составной хэш хэшей всех объектов, которые он представляет, а его метод Equals сравнивает каждый из скомпонованных элементов для равенства. Поскольку строки также переопределяют равенство, основанное на семантике равенства строк, ваш код будет работать как есть.

Смежные вопросы