2015-09-29 3 views
-2

Я пишу небольшой фрагмент кода для сериализации классов в двоичном формате, который можно десериализовать в объект, не зная тип на принимающей стороне. Тип определен в сборке, но вам не нужно указывать его в вызове метода (например, Deserialize<MyType>()). Я хочу создать какой-то словарь, который позволяет мне получить Type от int и соответствующего int от Type. Есть ли объект в .Net, который это делает?C# Уникальный сопоставления сопоставления однозначного словаря

В настоящее время у меня есть класс с двумя словарями private и некоторыми методами обработки и проверки добавления и удаления синхронизированных словарей. Проблема в том, что я пытаюсь избежать (дублирование данных).

Редактировать: Решение, предложенное в «Потенциальном дубликате», в основном делает то, что я уже делаю. Я спрашиваю, есть ли уже этот специальный класс словаря, который позволил бы отношениям один к одному, не дублируя каждый ключ и значение.

ответ

0

Создайте свой собственный класс с двумя личными словарями (один Dictionary<int,type> другой Dictionary<type,int>). Создайте два метода IntToType и TypeToInt, которые будут получать данные из их соответствующих словарей. Затем добавьте метод Add(int i, Type t), который добавит оба словаря. Поскольку это единственный способ добавить к нему (потому что они частные), у них нет возможности синхронизировать их.

+0

Я указал в вопросе, что это уже то, что у меня есть. Мой вопрос: это способ сделать это, или есть .Net-объект, который делает это без дублирования данных. –

+1

Если у вас нет миллионов классов, я бы даже об этом не беспокоился. «Int» и «type» не так много данных. «Int» и «type», умноженные на, например, 100, затем умножаются на 2 (для двух словарей), все же, это не много данных. –

+0

Моя забота здесь на самом деле не о размере данных, я чувствую, что он не должен быть вдвое большим, но я чувствую, что это идеальное место для введения ошибок. Если для этой цели уже нет объекта, я просто добавлю больше времени на создание своего собственного, правильно проверив каждую установку и удаление и т. Д. ... –

0

Если вы хотите получить быстрый доступ для получения типа от int и в противном случае int form Type, вам необходимо как-то дублировать данные. Но если время доступа не имеет решающего значения в вашей ситуации, вы можете просто сохранить один словарь и написать такой способ, чтобы получить ключ для указанного значения.

private Dictionary<int, Type> types; 

public int GetIntForType(Type t) 
{ 
    return types.FirstOrDefault(x => x.Value == t).Key; 
} 
+1

В зависимости от случая использования это может быть достаточно эффективным. Если поисковые запросы от 'int' к' type' являются наиболее распространенными, поиск с 'type' на' int' встречается редко (и если противоположное верно, просто используйте 'Dictionary ' вместо '') и количество предметов невелико. –

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

  • Нет связанных вопросов^_^