0

假设我有一个 A 的任意列表

class A
{
string K {get;set;}
string V {get;set;}
}

...
List<A> theList = ...

有没有一种简单的方法可以从 theList 编写字典?(类似于以下内容)

Dictionary<string, string> dict = magic(x => x.K, x => x.V, theList)

我不想写下面的代码:

var d = new Dictionary<string, string>
foreach(var blah in theList)
    d[blah.K] = blah.V
4

6 回答 6

9

有这个:Enumerable.ToDictionary

你像这样使用它:

Dictionary<string, string> dict = theList.ToDictionary(e => e.K, e => e.V);
于 2010-02-17T19:49:57.077 回答
4

如果列表是一个,IEnumerable<A>那么绝对是。您可以在 .NET 3.5 及更高版本的 System.Linq 命名空间中的 Enumerable 类上使用 ToDictionary 扩展方法,如下所示:

Dictionary<string, string> d = theList.ToDictionary(a => a.K, a => a.V);

这将为您提供一个字典,其中键是 K 属性中的值,值是 V 属性中的值。

于 2010-02-17T19:48:55.427 回答
1

Enumarable.ToDictionary<TSource,TKey>是您正在寻找的:

theList.ToDictionary(x => x.K, x => x.V);
于 2010-02-17T19:50:22.757 回答
1
var dict = theList.Cast<A>().ToDictionary(a => a.K, a => a.V);
于 2010-02-17T19:52:02.783 回答
1
Dictionary<string, string> dict = theList.ToDictionary( x => x.K , x=> x.V);
于 2010-02-17T19:54:50.640 回答
-2
Dictionary<string,string> dict = new Dictionary<string,string>();

theList.ForEach( param => dict[param.K] = param.V );

短一点,但基本上仍然是一个for-each循环。我ToDictionary()更喜欢这个解决方案。

于 2010-02-17T19:50:02.900 回答