如何转换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',因为它不是委托类型
使用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);