35

如何将 a 转换Dictionary<string, string>为 a 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 回答