我如何将Dictionary<string, string>
转换为NameValueCollection
?
我们项目中现有的功能返回一个老式的NameValueCollection
,我用LINQ进行修改。结果应该作为NameValueCollection
传递。
我想以一种通用的方式解决这个问题。有什么提示吗?
我如何将Dictionary<string, string>
转换为NameValueCollection
?
我们项目中现有的功能返回一个老式的NameValueCollection
,我用LINQ进行修改。结果应该作为NameValueCollection
传递。
我想以一种通用的方式解决这个问题。有什么提示吗?
为什么不使用一个简单的 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();
如果你喜欢LINQ:
return dictionary.Aggregate(new NameValueCollection(),
(seed, current) => {
seed.Add(current.Key, current.Value);
return seed;
});
(来源)
return source.Cast<string>()
.ToDictionary(s => s, s => source[s]);
试用这个词典扩展,希望它就是你想要的:
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()来更改此内容。
NullReferenceException
,因为kvp.Value
可能是null
。如果是这种情况,只需将null
值添加到NameValueCollection
中即可。 - Ronald