Indukanth Ответов: 2

как конвертировать список<Объект> К словарь&ЛТ;объект, строку&ГТ;?


Всем Привет,

у меня есть
List<object> dataList


и мне нужно обратиться в
Dictionary<object, string> SearchData = new Dictionary<object, string>();
?

DamithSL

так в чем же будет заключаться ключ и ценность словаря?

Indukanth

на мой datalist таким образом, это содержать текстовое значение..
его внешний вид похож http://pbrd.co/1HKoh04

мне нужно дать Id в качестве ключа и субъекта в качестве значения.

DamithSL

как создавать таблицы? разве вы не можете использовать List<someclass> Для вашего требования, а не список объектов?

DamithSL

обновите вопрос с тем, как вы создаете dataList, тогда мы сможем предоставить вам лучшее решение

Praveen Kumar Upadhyay

Пожалуйста, обновите свой вопрос здесь.

2 Ответов

Рейтинг:
11

OriginalGriff

Во-первых, не создавайте списки object - это противоречит цели универсальных коллекций, которая заключается в сильной типизации. Используйте список вашего фактического типа класса или var, если он возвращается запросом Linq.

Затем просто используйте метод ToDictionary Linq: http://msdn.microsoft.com/en-us/library/bb549277(v=против 95).aspx[^]

List<MyClass> mylist = new List<MyClass> {
           new MyClass(){Id = 208, Subject = "some text"},
           new MyClass(){Id = 209, Subject = "another text"},
           new MyClass(){Id = 210, Subject = "one text"},
           new MyClass(){Id = 211, Subject = "text mix"}};
Dictionary<int, MyClass> dict = mylist.ToDictionary(m => m.Id);


Рейтинг:
0

Member 10955785

var res = list.ToDictionary(x => x, x => x);

Первая лямбда позволяет выбрать ключ, вторая - значение.

Вы можете поиграть с ним и сделать так, чтобы значения отличались от клавиш, например:

var res = list.ToDictionary(x => x, x => string.Format("Val: {0}", x));

Если ваш список содержит дубликаты, добавьте Distinct() следующим образом:

var res = list.Distinct().ToDictionary(x => x, x => x);

Чтобы прокомментировать действительную причину, я думаю, что единственная причина, которая может быть действительной для таких преобразований, заключается в том, что в какой-то момент ключи и значения в результирующем словаре будут расходиться. Например, вы можете выполнить первоначальное преобразование, а затем заменить некоторые значения чем-то другим. Если ключи и значения всегда будут одинаковыми, то HashSet<String> будет гораздо лучше соответствовать вашей ситуации:

var res = new HashSet<string>(list);
if (res.Contains("string1"))