2015-09-10 2 views
-1

У меня есть список строк:Как преобразовать Список <string> в словарь <string, string> с помощью linq?

List<string> tList=new List<string>(); 
tList.add("a"); 
tList.add("mm"); 

Я хочу, чтобы преобразовать этот список в словарь поэтому ключ и значение словаря является то же самое с помощью Linq

Я пробовал:

var dict = tList.ToDictionary<string,string>(m => m, c => c); 

, но я получаю следующее сообщение об ошибке:

Cannot convert lambda expression to type 'IEqualityComparer' because it is not a delegate type

+2

Что вы пытались решить эту проблему и какие проблемы у вас были с вашими попытками? – Servy

+0

@Servy Я обновил свой вопрос :) – Ala

ответ

5

Используйте ToDictionary метод:

List<string> tList = new List<string>(); 
tList.add("a"); 
tList.add("mm"); 
var dict = tList.ToDictionary(k => k, v => v); 

Не забудьте добавить ссылку на System.Linq.

2

Вот подписи для ToDictionary

ToDictionary<TSource, TKey>(
    IEnumerable<TSource>, 
    Func<TSource, TKey>) 

ToDictionary<TSource, TKey>(
    IEnumerable<TSource>, 
    Func<TSource, TKey>, 
    IEqualityComparer<TKey>) 

ToDictionary<TSource, TKey, TElement>(
    IEnumerable<TSource>, 
    Func<TSource, TKey>, 
    Func<TSource, TElement>) 

ToDictionary<TSource, TKey, TElement>(
    IEnumerable<TSource>, 
    Func<TSource, TKey>, 
    Func<TSource, TElement>, 
    IEqualityComparer<TKey>) 

Вы хотите 3-ия, но так как вы называете его и указать два универсальных типов она вместо того, чтобы с помощью 2-ой и вашего второго аргумента (фактически третий с момента первого это аргумент, на который вызывается метод расширения) не является IEqualityComparer<TKey>. Исправление либо указать третий тип

var dict = tList.ToDictionary<string,string,string>(m => m, c => c); 

Не указывайте общие типы и пусть фигурку компилятора их через умозаключение типа

var dict = tList.ToDictionary(m => m, c => c); 

Или, так как вы хотите детали быть значением вы можете просто использовать 1-й вариант и избегать второй лямбды вообще.

var dict = tList.ToDictionary(c => c); 
Смежные вопросы