Какой тип данных использовать? - PullRequest
0 голосов
/ 21 ноября 2008

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

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

Я думал

IDictionary<int, KeyvaluePair<TheType, double>>

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

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

Ответы [ 4 ]

2 голосов
/ 21 ноября 2008

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

1 голос
/ 21 ноября 2008
struct MyPair
{
    public object TheType;
    public double Value;
}

MyPair[] MyColleccyion = new MyPair[20]; 
0 голосов
/ 21 ноября 2008

Как насчет этого

public class ListThing<TKey, TValue> : Dictionary<TKey, TValue>
{
    public double DoubleThing { get; set; }

    public ListThing(double value)
    {
        DoubleThing = value;
    }
}
0 голосов
/ 21 ноября 2008

Что ж, KeyValuePair является неизменяемым (и это хорошо), поэтому вам придется заменить все значение KeyValuePair, а не только его часть:

yourDict[10] = new KeyValuePair<TheType, Double>(yourDict[10].Key, newValue);

... или думать как Джон Скит . Гах. :)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...