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?
c#
dictionary
tostring
user705414
quelle
quelle
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()) + "}"; }
quelle
ToArray()
, noch für dieToString()
.ToArray()
wird wirklich benötigt, wenn Sie eine Version verwenden, die niedriger als NET 4.0 istWenn 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>
implementiertIEnumerable<KeyValuePair<TKey, TValue>>
.Beispiel
Console.WriteLine(string.Join(Environment.NewLine, new Dictionary<string, string> { {"key1", "value1"}, {"key2", "value2"}, {"key3", "value3"}, })); /* [key1, value1] [key2, value2] [key3, value3] */
quelle
ListDictionary
. Ansonsten großartig, abstimmendWie 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}
quelle
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(); }
quelle
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.
quelle
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"}
quelle
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],...
quelle
Eine andere Lösung:
var dic = new Dictionary<string, double>() { {"A", 100.0 }, {"B", 200.0 }, {"C", 50.0 } }; string text = dic.Select(kvp => kvp.ToString()).Aggregate((a, b) => a + ", " + b);
Wert des Textes:
[A, 100], [B, 200], [C, 50]
quelle
Sie können die Schlüssel des Wörterbuchs durchlaufen und sie zusammen mit dem Wert ...
public string DictToString(Dictionary<string, string> dict) { string toString = ""; foreach (string key in dict.Keys) { toString += key + "=" + dict[key]; } return toString; }
quelle
Ich mag den Ansatz von ShekHar_Pro, den Serializer zu verwenden. Die einzige Empfehlung ist, json.net zum Serialisieren zu verwenden und nicht den integrierten JavaScriptSerializer, da dieser langsamer ist.
quelle
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: ");
quelle
Sie müssen lediglich eine Klasse erstellen, die
Dictionary
dieToString()
Methode erweitert und überschreibt .Wir sehen uns
quelle