C#: Convert Dictionary<> to NameValueCollection

后端 未结 3 1370
执念已碎
执念已碎 2021-01-31 03:42

How can I convert a Dictionary to a NameValueCollection?

The existing functionality of our project returns an old-fashion

相关标签:
3条回答
  • 2021-01-31 03:54

    Why not use a simple foreach loop?

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

    This could be embedded into an extension method:

    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;
    }
    

    You could then call it like this:

    var nameValueCollection = dict.ToNameValueCollection();
    
    0 讨论(0)
  • 2021-01-31 04:02

    try this Extension to Dictionary I hope it's what you wanted:

    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;
        }
    }
    

    use like

    var nvc = myDict.ToNameValueCollection();
    

    note: I have constrained the key to be string because I didn't want to overgeneralize - of course you can change this with a generic type and .ToString() for the key too.

    0 讨论(0)
  • 2021-01-31 04:03

    And if you like LINQ:

    Dictionary to NameValueCollection

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

    NameValueCollection to Dictionary

    (source)

    return source.Cast<string>()  
        .ToDictionary(s => s, s => source[s]);
    
    0 讨论(0)
提交回复
热议问题