88 votes

Existe-t-il un moyen pratique de convertir un dictionnaire en chaîne ?

J'ai trouvé que l'implémentation par défaut de ToString dans le dictionnaire n'est pas ce que je veux. J'aimerais avoir {key=value, ***} .

Un moyen pratique de l'obtenir?

132voto

alextercete Points 271

Si vous souhaitez simplement sérialiser à des fins de débogage, le moyen le plus court consiste à utiliser String.Join :

 var asString = string.Join(Environment.NewLine, dictionary);

Cela fonctionne car IDictionary<TKey, TValue> implémente IEnumerable<KeyValuePair<TKey, TValue>> .

Exemple

 Console.WriteLine(string.Join(Environment.NewLine, new Dictionary<string, string> {
    {"key1", "value1"},
    {"key2", "value2"},
    {"key3", "value3"},
}));
/*
[key1, value1]
[key2, value2]
[key3, value3]
*/

124voto

Tim Rogers Points 9956

Essayez cette méthode d'extension :

 public static string ToDebugString<TKey, TValue> (this IDictionary<TKey, TValue> dictionary)
{
    return "{" + string.Join(",", dictionary.Select(kv => kv.Key + "=" + kv.Value).ToArray()) + "}";
}

11voto

Ani Points 59747

Que diriez-vous d'une méthode d'extension telle que :

 public static string MyToString<TKey,TValue>
      (this IDictionary<TKey,TValue> dictionary)
{
    if (dictionary == null)
        throw new ArgumentNullException("dictionary");

    var items = from kvp in dictionary
                select kvp.Key + "=" + kvp.Value;

    return "{" + string.Join(",", items) + "}";
}

Exemple:

 var dict = new Dictionary<int, string>
{
    {4, "a"},
    {5, "b"}
};

Console.WriteLine(dict.MyToString());

Production:

 {4=a,5=b}

8voto

JSBձոգչ Points 25069

Aucun moyen pratique. Vous devrez rouler le vôtre.

 public static string ToPrettyString<TKey, TValue>(this IDictionary<TKey, TValue> dict)
{
    var str = new StringBuilder();
    str.Append("{");
    foreach (var pair in dict)
    {
        str.Append(String.Format(" {0}={1} ", pair.Key, pair.Value));
    }
    str.Append("}");
    return str.ToString();
}

6voto

Matías Fidemraizer Points 16842

Peut-être:

 string.Join
(
    ",",
    someDictionary.Select(pair => string.Format("{0}={1}", pair.Key.ToString(), pair.Value.ToString())).ToArray()
);

Tout d'abord, vous itérez chaque paire clé-valeur et la formatez comme vous le souhaitez sous forme de chaîne, puis convertissez-la en tableau et joignez-la en une seule chaîne.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X