2011-02-09 75 views

Respuesta

77

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()); 
} 
+0

Estoy usando .NET 2.0, es posible en él. No obtengo "ToDictionary" –

+0

@Rune: Will 'k.Value.ToString()' devolverá siempre lo mismo que '(string) k.Value'? –

+0

@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. –

2

¿Qué tal:

Dictionary<string, string> newDictionary = dObject.ToDictionary(k => k.Key, k => (string) k.Value); 
+0

Esto fallará si el diccionario contiene valores que no sean cadenas. No puede convertir un int en una cadena, por ejemplo. –

+0

Primero de todo estoy usando .NET 2.0, es posible en él. No estoy recibiendo el método "ToDictionary". –

+0

Bueno, supongo que si él quiere hacerlo es porque el diccionario contiene 'cadenas', pero de todos modos, eso es válido. –

5

.NET 3.5:

Dictionary<string, string> result = dObject.ToDictionary(kvp => kvp.Key, kvp => Convert.ToString(kvp.Value)); 

.NET 2.0:

Dictionary<string, string> result = new Dictionary<string, string>(); 
foreach (KeyValuePair<string, object> kvp in dObject) result.Add(kvp.Key, Convert.ToString(kvp.Value)); 
4

dado que está utilizando .NET 2.0:

Dictionary<string, string> dString = new Dictionary<string, string>(); 

foreach (KeyValuePair<string, object> item in dObject) 
{ 
    dString.Add(item.Key, item.Value.ToString()); 
    //here item.Value.ToString() is an example 
    //you should convert your item to string according to the requirement 
} 
+0

¿Qué pasa si hay valores NULL en él? –

+3

@MKS: Por eso digo "convierte tu artículo a cadena de acuerdo con el requisito", por ejemplo, puedes usar 'string.Empty' para valores nulos, o la cadena '' NULL '' para valores nulos ... todo depende en el requisito –

+0

En algún momento puede haber valores nulos también en la clave, por favor sugiera cómo convertirlo? –

1

En .Net 2.0 probablemente su mejor amigo es foreach bucle:

Dictionary<string, object> dObject = new Dictionary<string, object>(); 
Dictionary<string, string> newObjects = new Dictionary<string, string>(); 

foreach (KeyValuePair<string, object> keyValuePair in dObject) 
{ 
    newObjects.Add(keyValuePair.Key, keyValuePair.Value.ToString()); 
} 
0
Dictionary<string, string> dString = dObject.ToDictionary(kvp => kvp.Key, kvp => kvp.Value.ToString()); 

Es sólo idea. Puede insertar cualquier verificación.

Cuestiones relacionadas