从IEnumerable<KeyValuePair<>>

我有一个返回IEnumerable<KeyValuePair<string, ArrayList>>的方法,但一些调用者要求该方法的结果是一个字典。如何将IEnumerable<KeyValuePair<string, ArrayList>>转换为Dictionary<string, ArrayList>,以便我可以使用TryGetValue?

方法:

public IEnumerable<KeyValuePair<string, ArrayList>> GetComponents()
{
// ...
yield return new KeyValuePair<string, ArrayList>(t.Name, controlInformation);
}

打电话者:

Dictionary<string, ArrayList> actual = target.GetComponents();
actual.ContainsKey("something");
126264 次浏览

如果你使用。net 3.5或。net 4,使用LINQ创建字典很容易:

Dictionary<string, ArrayList> result = target.GetComponents()
.ToDictionary(x => x.Key, x => x.Value);

没有IEnumerable<T1, T2>这样的东西,但KeyValuePair<TKey, TValue>是可以的。

从。net Core 2.0开始,构造函数Dictionary<TKey,TValue>(IEnumerable<KeyValuePair<TKey,TValue>>)就存在了。