Użyj metody ToDictionary:
Dictionary<string, string> dString = dObject.ToDictionary(k => k.Key, k => k.Value.ToString());
Tutaj ponownie użyć klucza z oryginalnego słownika i konwertować wartości do ciągów wykorzystujących metodę toString.
Jeśli słownik może zawierać wartości null należy dodać null sprawdzenie przed wykonaniem ToString:
Dictionary<string, string> dString = dObject.ToDictionary(k => k.Key, k => k.Value == null ? "" : k.Value.ToString());
Powodem tego jest to, że działa Dictionary<string, object>
jest rzeczywiście IEnumerable<KeyValuePair<string,object>>
. Powyższy przykład kodu iteruje poprzez przeliczalne i buduje nowy słownik przy użyciu metody ToDictionary.
Edit:
w .NET 2.0 nie można użyć metody ToDictionary, ale można osiągnąć to samo przy użyciu dobrej staromodny foreach:
Dictionary<string, string> sd = new Dictionary<string, string>();
foreach (KeyValuePair<string, object> keyValuePair in dict)
{
sd.Add(keyValuePair.Key, keyValuePair.Value.ToString());
}
Edit2:
Jeśli korzystasz z .Net 2.0 i możesz mieć wartości puste w słowniku, poniższe elementy powinny być bezpieczne:
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());
}
Używam .NET 2.0, jest możliwe w nim. Nie otrzymuję "ToDictionary" –
@Rune: Czy 'k.Value.ToString()' zwraca zawsze to samo, co '(string) k.Value'? –
@Oscar: Nie. (Ciąg) k.Value nie powiedzie się, jeśli wartość jest obiektem nie będącym ciągiem. Funkcja ToString() jest bezpieczna dla wszystkich wartości innych niż NULL. –