編輯
如果你真的覺得你需要從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);
}
然後,你可以在任何IEnumerable<KeyValuePair<TKey, TValue>>
致電ToDictionary()
。
EDIT 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);
如果可能有重複,do
var d = q.ToLookup(p => p.NickName, p => p.Name);
但要注意,這個返回一個ILookup<TKey, TElement>
,在Item
索引,其中,返回IEnumerable<TElement>
這樣你就不會丟棄數據。
'new Dictionary(d1);'或'd1 = q.ToDictionary(p => p.Key,p => p.Value) – Jodrell
@Jodrell祝你好運編譯'new'語句 – Alex
@Alex,你是對的,沒有'IEnumerable>構造器過載。 –
Jodrell