编辑
如果你真的觉得你需要从IEnumerable<KeyValuePair<TKey, TValue>>
到一个Dictionary
隐含的,你可以添加这个扩展。
public static IDictionary<TKey, ToValue> ToDictionary<TKey, TValue>(
this IEnumerable<KeyValuePair<TKey, TValue>> source)
{
return source.ToDictionary(p => p.Key, p => p.Value);
}
然后你可以调用ToDictionary()
任何IEnumerable<KeyValuePair<TKey, TValue>>
.
编辑 2
如果您预计重复,那么您也可以创建一个ToLookup()
扩展。
public static ILookup<TKey, TValue> ToLookup<TKey, TValue>(
this IEnumerable<KeyValuePair<TKey, TValue>> source)
{
return source.ToLookup(p => p.Key, p => p.Value);
}
或者,如果你真的想丢弃结果,你可以为ToDictionary
.
public static IDictionary<TKey, ToValue> ToDictionary<TKey, TValue>(
this IEnumerable<KeyValuePair<TKey, TValue>> source,
Func<<IEnumerable<TValue>, TValue> selector)
{
return source
.Lookup(p => p.Key, p => p.Value);
.ToDictionary(l => l.Key, l => selector(l));
}
如果您任意丢弃除“第一个”(没有 是什么意思OrderBy
)项目之外的所有项目,您可以像这样使用此扩展,
pairs.ToDictionary(v => v.First());
总体而言,您可以删除大部分代码并执行以下操作,
var q = from p in pl
where p.Name.First() == 'A';
var d = q.ToDictionary(p => p.NickName, p => p.Name);
如果可能有重复,做
var d = q.ToLookup(p => p.NickName, p => p.Name);
但请注意,这会返回 an ILookup<TKey, TElement>
,其中的Item
索引器会返回 an ,IEnumerable<TElement>
因此您不会丢弃数据。