utilizar el método de ToDictionary:
Dictionary<string, string> dString = dObject.ToDictionary(k => k.Key, k => k.Value.ToString());
Aquí vuelve a utilizar la clave del diccionario original y convertir los valores de cadenas utilizando el método ToString.
Si su diccionario puede contener valores nulos debe agregar un cheque nulo antes de realizar la ToString:
Dictionary<string, string> dString = dObject.ToDictionary(k => k.Key, k => k.Value == null ? "" : k.Value.ToString());
La razón por la que esto funciona es que el Dictionary<string, object>
es en realidad un IEnumerable<KeyValuePair<string,object>>
. El ejemplo de código anterior recorre el enumerable y crea un nuevo diccionario utilizando el método ToDictionary.
Editar:
En .Net 2.0 no se puede utilizar el método ToDictionary, pero se puede lograr el mismo mediante una buena pasada de moda foreach:
Dictionary<string, string> sd = new Dictionary<string, string>();
foreach (KeyValuePair<string, object> keyValuePair in dict)
{
sd.Add(keyValuePair.Key, keyValuePair.Value.ToString());
}
Edit2:
Si tiene .Net 2.0 y puede tener valores nulos en el diccionario, lo siguiente debe ser seguro:
Dictionary<string, string> sd = new Dictionary<string, string>();
foreach (KeyValuePair<string, object> keyValuePair in dict)
{
sd.Add(keyValuePair.Key, keyValuePair.Value == null ? "" : keyValuePair.Value.ToString());
}
Estoy usando .NET 2.0, es posible en él. No obtengo "ToDictionary" –
@Rune: Will 'k.Value.ToString()' devolverá siempre lo mismo que '(string) k.Value'? –
@Oscar: No. la (cadena) k.Value fallará si el valor es un objeto que no sea de cadena. ToString() es seguro para todos los valores no nulos. –