2015-09-10 53 views
-1

我有一個字符串列表:如何將List <string>轉換成Dictionary <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是擴展方法被調用的參數)不是IEqualityComparer<TKey>。解決方法是要麼指定第三類

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

不要指定泛型類型,讓通過類型推理編譯器數字出來

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

或者因爲你需要的產品是值你可以直接使用第一個,並避免第二個lambda。

var dict = tList.ToDictionary(c => c); 
相關問題