Ich fand, dass die Standardimplementierung von ToString im Wörterbuch nicht das ist, was ich will. Ich hätte gerne {key=value, ***}
.
Irgendein praktischer Weg, um es zu bekommen?
Ich fand, dass die Standardimplementierung von ToString im Wörterbuch nicht das ist, was ich will. Ich hätte gerne {key=value, ***}
.
Irgendein praktischer Weg, um es zu bekommen?
Antworten:
Versuchen Sie diese Erweiterungsmethode:
public static string ToDebugString<TKey, TValue> (this IDictionary<TKey, TValue> dictionary)
{
return "{" + string.Join(",", dictionary.Select(kv => kv.Key + "=" + kv.Value).ToArray()) + "}";
}
ToArray()
, noch für die ToString()
.
ToArray()
wird wirklich benötigt, wenn Sie eine Version verwenden, die niedriger als NET 4.0 ist
Wenn Sie nur zu Debugging-Zwecken serialisieren möchten, ist der kürzere Weg String.Join
:
var asString = string.Join(Environment.NewLine, dictionary);
Dies funktioniert, weil IDictionary<TKey, TValue>
implementiert IEnumerable<KeyValuePair<TKey, TValue>>
.
Console.WriteLine(string.Join(Environment.NewLine, new Dictionary<string, string> {
{"key1", "value1"},
{"key2", "value2"},
{"key3", "value3"},
}));
/*
[key1, value1]
[key2, value2]
[key3, value3]
*/
ListDictionary
. Ansonsten großartig, abstimmend
Wie wäre es mit einer Erweiterungsmethode wie:
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) + "}";
}
Beispiel:
var dict = new Dictionary<int, string>
{
{4, "a"},
{5, "b"}
};
Console.WriteLine(dict.MyToString());
Ausgabe:
{4=a,5=b}
Kein praktischer Weg. Sie müssen Ihre eigenen rollen.
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();
}
Vielleicht:
string.Join
(
",",
someDictionary.Select(pair => string.Format("{0}={1}", pair.Key.ToString(), pair.Value.ToString())).ToArray()
);
Zuerst iterieren Sie jedes Schlüssel-Wert-Paar und formatieren es so, wie Sie es als Zeichenfolge sehen möchten. Später konvertieren Sie es in ein Array und verbinden es zu einer einzelnen Zeichenfolge.
Ich habe diese einfache Antwort erhalten. Verwenden Sie hierfür JavaScriptSerializer
Class.
Und Sie können einfach die Serialize-Methode mit dem Dictionary-Objekt als Argument aufrufen.
Beispiel:
var dct = new Dictionary<string,string>();
var js = new JavaScriptSerializer();
dct.Add("sam","shekhar");
dct.Add("sam1","shekhar");
dct.Add("sam3","shekhar");
dct.Add("sam4","shekhar");
Console.WriteLine(js.Serialize(dct));
Ausgabe:
{"sam":"shekhar","sam1":"shekhar","sam3":"shekhar","sam4":"shekhar"}
Wenn Sie Linq verwenden möchten, können Sie Folgendes ausprobieren:
String.Format("{{{0}}}", String.Join(",", test.OrderBy(_kv => _kv.Key).Zip(test, (kv, sec) => String.Join("=", kv.Key, kv.Value))));
wo "test" ist dein Wörterbuch. Beachten Sie, dass der erste Parameter für Zip () nur ein Platzhalter ist, da eine Null nicht übergeben werden kann.
Wenn das Format nicht wichtig ist, versuchen Sie es
String.Join(",", test.OrderBy(kv => kv.Key));
Welches wird Ihnen so etwas geben
[key,value], [key,value],...
Ich mag Lösungen mit der obigen Erweiterungsmethode sehr, aber ihnen fehlt eine Kleinigkeit für zukünftige Zwecke - Eingabeparameter für Trennzeichen, also:
public static string ToPairString<TKey, TValue>(this Dictionary<TKey, TValue> dictionary, string pairSeparator, string keyValueSeparator = "=")
{
return string.Join(pairSeparator, dictionary.Select(pair => pair.Key + keyValueSeparator + pair.Value));
}
Anwendungsbeispiel:
string result = myDictionary.ToPairString(Environment.NewLine, " with value: ");
Sie müssen lediglich eine Klasse erstellen, die Dictionary
die ToString()
Methode erweitert und überschreibt .
Wir sehen uns