c# namevaluecollection

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.