У меня есть требование для реализации какого-либо объекта словаря. Что-то вроде MyDict<K,V1, V2). Например, если у меня есть вопрос в качестве ключа (k), то правильный ответ - V1. V2 - выбранный пользователем ответ. Есть ли коллекция, которая бы удовлетворяла этому требованию в C #. Если я должен разработать свой собственный тип, какие интерфейсы я должен реализовать. ICollection и Ilist?
MyDict<K,V1, V2)
ICollection
Ilist
Если вы используете .NET 4, вы можете использовать несколько общих Tuple классов.
Tuple
Итак, вы можете использовать:
Dictionary<T,Tuple<V1,V2>>
В более ранних версиях вы могли использовать KeyValuePair<T1,T2> в качестве второго универсального типа:
KeyValuePair<T1,T2>
Dictionary<T,KeyValuePair<V1,V2>>
Классы коллекции определены как часть пространства имен System.Collections или System.Collections.Generic.
System.Collections
System.Collections.Generic
Общий словарь класса
что-то вроде:
Dictionary<Question,Answer> qDict = new Dictionary<Question, Answer>(); Answer attempt_v2 = new Answer(); Question question = new Question(); if (qDict.ContainsKey(question)) { Answer actual_answerv1 = qDict[question]; if (actual_answerv1 == attempt_v2) { // Answers match } }
[Примечание: я только что выбил это. Возможно, это не лучшее решение проблемы совмещения вопросов и ответов ...]
Я думаю, что нужна новая реализация.
ИЛИ, если ваш ответ имеет свойство Selected, вы можете создать.
Dictionary<Question, IList<Answer>>
или вы можете иметь тип с
class Answers { Ilist Answers; Answer Selected; }