尝试将值从现有NameValueCollection对象复制到Dictionary。我在下面的代码中执行此操作,但似乎Add不接受我的键和值作为Strings

IDictionary<TKey, TValue> dict = new Dictionary<TKey, TValue>();
public void copyFromNameValueCollection (NameValueCollection a)
{
    foreach (var k in a.AllKeys)
    {
        dict.Add(k, a[k]);
    }
}

注意: NameValueCollection包含字符串键和值,因此我只想在此处提供一种方法,以允许将其复制到通用字典中。

最佳答案

在这里使用泛型是没有意义的,因为您不能将string分配给某些任意的泛型类型:

IDictionary<string, string> dict = new Dictionary<string, string>();

public void copyFrom(NameValueCollection a)
{
            foreach (var k in a.AllKeys)
            {
                dict.Add(k, a[k]);
            }
}

尽管您可能应该创建一个方法来创建新字典,但是:
public static IDictionary<string, string> ToDictionary(this NameValueCollection col)
{
    IDictionary<string, string> dict = new Dictionary<string, string>();
    foreach (var k in col.AllKeys)
    {
        dict.Add(k, col[k]);
    }
    return dict;
}

您可以像这样使用:
NameValueCollection nvc = //
var dictionary = nvc.ToDictionary();

如果您想要将集合中的字符串转换为所需键/值类型的通用方法,则可以使用类型转换器:
public static Dictionary<TKey, TValue> ToDictionary<TKey, TValue>(this NameValueCollection col)
{
    var dict = new Dictionary<TKey, TValue>();
    var keyConverter = TypeDescriptor.GetConverter(typeof(TKey));
    var valueConverter = TypeDescriptor.GetConverter(typeof(TValue));

    foreach(string name in col)
    {
        TKey key = (TKey)keyConverter.ConvertFromString(name);
        TValue value = (TValue)valueConverter.ConvertFromString(col[name]);
        dict.Add(key, value);
    }

    return dict;
}

关于c# - 将键值从NameValueCollection复制到通用字典,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16549758/

10-12 17:05