如何转换Liststring> Dictionary<字符串;使用linq

本文关键字:string Dictionary gt 字符串 linq 使用 转换 List 何转换 | 更新日期: 2023-09-27 18:12:04

我有一个字符串列表:

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

我想把这个列表转换成一个字典,这样字典的键和值是相同的,使用linq

I have try:

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

,但我得到以下错误:

无法将lambda表达式转换为类型'IEqualityComparer',因为它不是委托类型

如何转换List<string>string> Dictionary<字符串;使用linq

使用ToDictionary方法:

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

不要忘记添加对System.Linq的引用

以下是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>)

你想要第三个,但是因为你调用它并指定了两个泛型类型,所以它使用的是第二个,而你的第二个参数(实际上是第三个,因为第一个是扩展方法被调用的参数)不是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);