Мне нужна коллекция, которая
я думал
IDictionary<int, KeyvaluePair<TheType, double>>
сделает свое дело, но тогда я не могу установить двойное значение после инициализации.
--Редактировать--
Я обнаружил, что классы, сгенерированные визуальной студией linq 2 sql, на самом деле являются частичными классами, поэтому вы можете добавлять к ним все, что хотите. Свой вопрос я решил, добавив в частичный класс двойное поле.
Спасибо всем за ответы, которые вы пришли.
Двойник рассчитывается в зависимости от полей объекта. Поскольку я не могу добавить метод или поле к самому объекту, я хочу сделать это таким образом.
Мне кажется, вы могли бы захотеть создать подкласс (расширить) объект? Было бы намного больше OO, имена шаблонов были бы Proxy или Decorator.





Похоже, вам может понадобиться эквивалент KeyValuePair, но изменчивый. Учитывая, что вы используете его только как пару значений, а не как пару ключ-значение, вы можете просто сделать:
public class MutablePair<TFirst, TSecond>
{
public TFirst First { get; set; }
public TSecond Second { get; set; }
public MutablePair()
{
}
public MutablePair(TFirst first, TSecond second)
{
First = first;
Second = second;
}
}
Это не отменяет GetHashCode или Equals, потому что вы фактически не используете их (поскольку они находятся в позиции значения).
Ваше решение правильное, но мои требования не были выполнены. Обновил их. Не могли бы вы взглянуть?
Конструкторы не могут быть универсальными. Конечно, я почти уверен, что вы это знаете, но я все равно прокомментировал.
Что ж, KeyValuePair является неизменяемым (что хорошо), поэтому вам придется заменить все значение KeyValuePair, а не только его часть:
yourDict[10] = new KeyValuePair<TheType, Double>(yourDict[10].Key, newValue);
... или подумайте, как Джон Скит. Ага. :)
struct MyPair
{
public object TheType;
public double Value;
}
MyPair[] MyColleccyion = new MyPair[20];
Как насчет этого
public class ListThing<TKey, TValue> : Dictionary<TKey, TValue>
{
public double DoubleThing { get; set; }
public ListThing(double value)
{
DoubleThing = value;
}
}
Что вы подразумеваете под "связанным с" дублем?