C#: Convertir diccionario<> a NameValueCollection
(3)
¿Por qué no usar un simple bucle foreach
?
foreach(var kvp in dict)
{
nameValueCollection.Add(kvp.Key.ToString(), kvp.Value.ToString());
}
Esto podría estar integrado en un método de extensión:
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;
}
Entonces podrías llamarlo así:
var nameValueCollection = dict.ToNameValueCollection();
¿Cómo puedo convertir un Dictionary<string, string>
a un NameValueCollection
?
La funcionalidad existente de nuestro proyecto devuelve una antigua NameValueCollection
que NameValueCollection
con LINQ. El resultado debe pasarse como NameValueCollection
.
Quiero resolver esto de una manera genérica. ¿Alguna pista?
Y si te gusta LINQ:
Diccionario a 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]);
prueba esta extensión al diccionario. Espero que sea lo que querías:
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;
}
}
usar como
var nvc = myDict.ToNameValueCollection();
nota: he restringido la clave para que sea una cadena porque no quería sobregeneralizar, por supuesto, puede cambiar esto con un tipo genérico y .ToString () para la clave también.