35

どうすればaをに変換できDictionary<string, string>ますNameValueCollectionか?

NameValueCollection私たちのプロジェクトの既存の機能は、LINQで変更した昔ながらの機能を返します。結果はとして渡される必要がありNameValueCollectionます。

これを一般的な方法で解決したいと思います。ヒントはありますか?

4

3 に答える 3

42

単純なforeachループを使用してみませんか?

foreach(var kvp in dict)
{
    nameValueCollection.Add(kvp.Key.ToString(), kvp.Value.ToString());
}

これは、拡張メソッドに埋め込むことができます。

public static NameValueCollection ToNameValueCollection<TKey, TValue>(
    this IDictionary<TKey, TValue> dict)
{
    var nameValueCollection = new NameValueCollection();

    foreach(var kvp in dict)
    {
        string value = null;
        if(kvp.Value != null)
            value = kvp.Value.ToString();

        nameValueCollection.Add(kvp.Key.ToString(), value);
    }

    return nameValueCollection;
}

次に、次のように呼び出すことができます。

var nameValueCollection = dict.ToNameValueCollection();
于 2011-08-29T13:02:19.107 に答える
38

そして、LINQが好きなら:

NameValueCollectionへの辞書

return dictionary.Aggregate(new NameValueCollection(),
    (seed, current) => { 
        seed.Add(current.Key, current.Value);
        return seed;
    });

NameValueCollectionから辞書へ

ソース

return source.Cast<string>()  
    .ToDictionary(s => s, s => source[s]);
于 2013-11-19T16:32:33.273 に答える
6

この辞書拡張機能を試してみてください。あなたが望んでいたものだといいのですが。

public static class DictionaryExtensions
{
    public static NameValueCollection ToNameValueCollection<tValue>(this IDictionary<string, tValue> dictionary)
    {
        var collection = new NameValueCollection();
        foreach(var pair in dictionary)
            collection.Add(pair.Key, pair.Value.ToString());
        return collection;
    }
}

のように使用

var nvc = myDict.ToNameValueCollection();

注:過度に一般化したくなかったため、キーを文字列に制限しました。もちろん、これはジェネリック型とキーの.ToString()で変更できます。

于 2011-08-29T13:05:36.453 に答える