Какой тип данных использовать?

Мне нужна коллекция, которая

  • содержит набор объектов, связанных с дублем.
  • Последовательность этих пар должна быть произвольно задана мной (на основе целого числа, полученного мной из базы данных) и быть статической на протяжении всего жизненного цикла.
  • Количество записей будет небольшим (0 ~ 20), но разным.
  • Коллекция должна быть удобной для чтения.
  • Мне не нужно ничего искать в коллекции.
  • Двойник будет изменен после инициализации коллекции.
  • Я хотел бы работать с существующими типами данных (без новых классов), поскольку он будет использоваться в моих контроллерах, представлениях и сервисах asp.net mvc, и я не хочу, чтобы все они зависели от библиотеки только для этого глупого держателя класс.

я думал

IDictionary<int, KeyvaluePair<TheType, double>>

сделает свое дело, но тогда я не могу установить двойное значение после инициализации.

--Редактировать--
Я обнаружил, что классы, сгенерированные визуальной студией linq 2 sql, на самом деле являются частичными классами, поэтому вы можете добавлять к ним все, что хотите. Свой вопрос я решил, добавив в частичный класс двойное поле. Спасибо всем за ответы, которые вы пришли.

Что вы подразумеваете под "связанным с" дублем?

Jon Skeet 21.11.2008 14:08

Двойник рассчитывается в зависимости от полей объекта. Поскольку я не могу добавить метод или поле к самому объекту, я хочу сделать это таким образом.

Boris Callens 21.11.2008 14:12

Мне кажется, вы могли бы захотеть создать подкласс (расширить) объект? Было бы намного больше OO, имена шаблонов были бы Proxy или Decorator.

Loki 21.11.2008 14:32
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
3
640
4

Ответы 4

Похоже, вам может понадобиться эквивалент 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, потому что вы фактически не используете их (поскольку они находятся в позиции значения).

Ваше решение правильное, но мои требования не были выполнены. Обновил их. Не могли бы вы взглянуть?

Boris Callens 21.11.2008 14:23

Конструкторы не могут быть универсальными. Конечно, я почти уверен, что вы это знаете, но я все равно прокомментировал.

Farhad Jabiyev 16.04.2015 16:16

Что ж, 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;
    }
}

Другие вопросы по теме