Was ist die am besten lesbare Verwendung von String.Format für lange Zeichenfolgen mit vielen Parametern?

StackOverflow https://stackoverflow.com/questions/1528210

Frage

Zum Beispiel:

String login = String.Format("computer={0}&ver={1}.{2}.{3}&from={4}&realcomputername={5}&type={6}&Channels={7}&Hotkeys={8}&ID={9}\r\n",
            serviceConfig.Computer,
            serviceConfig.Version.Major,
            serviceConfig.Version.Minor,
            serviceConfig.Version.Build,
            userName,
            Environment.MachineName,
            type,
            serviceConfig.ChannelsString,
            serviceConfig.HotKeysString,
            serviceConfig.AlarmGroupName);

Dadurch entsteht kein gut lesbarer Code, und je mehr Parameter hinzugefügt werden, desto hässlicher sieht es aus und es ist verwirrender, herauszufinden, welcher Parameter in welchen Slot passt.

Ich weiß, dass dies eine Noob-Frage ist, und ich denke, ich frage nur, wie man den Text formatiert, damit er besser lesbar ist, aber wenn es einen besseren Weg gibt, dies zu tun, würde ich das auch gerne wissen.

War es hilfreich?

Lösung

Du könntest dir das ansehen StringBuilder-Klasse und teilen Sie die Zusammenstellung der Zeichenfolge auf mehrere Zeilen auf.

Der AppendFormat-Methode (danke Joel) ist das, was Sie in diesem Fall wollen.

Andere Tipps

String login = String.Format(
    "computer={0}"+
    "&ver={1}.{2}.{3}"+
    "&from={4}"+
    "&realcomputername={5}"+
    "&type={6}"+
    "&Channels={7}"+
    "&Hotkeys={8}"+
    "&ID={9}\r\n",
    serviceConfig.Computer,
    serviceConfig.Version.Major,
    serviceConfig.Version.Minor,
    serviceConfig.Version.Build,
    userName,
    Environment.MachineName,
    type,
    serviceConfig.ChannelsString,
    serviceConfig.HotKeysString,
    serviceConfig.AlarmGroupName);

Vorausgesetzt, Sie können LINQ verwenden, können Sie Ihre Argumente in a einfügen Dictionary<string, string>, dann füge die Argumente zusammen:

Dictionary<string, string> args = new Dictionary<string, string>
{
    {"computer", serviceConfig.Computer},
    {"ver", string.Format("{0}.{1}.{2}",
        serviceConfig.Version.Major,
        serviceConfig.Version.Minor,
        serviceConfig.Version.Build)},
    {"from", userName},
    {"realcomputername", Environment.MachineName},
    {"type", type},
    {"Channels", serviceConfig.ChannelsString},
    {"Hotkeys", serviceConfig.HotKeysString},
    {"ID", serviceConfig.AlarmGroupName},
};

string login = string.Join("&", args.Select(arg =>
    string.Format("{0}={1}", arg.Key, arg.Value)).ToArray());

Dies ist geringfügig langsamer und speicherintensiver als ein einfaches string.Format, aber es sieht so aus, als würden Sie gerade eine HTTP-Anfrage stellen, sodass ich fast garantieren kann, dass dies nicht der Engpass ist.

Diese letzte Zeile kann auch in eine Erweiterungsmethode umgewandelt werden, die Sie jederzeit verwenden können, wenn Sie eine Abfragezeichenfolge wie diese erstellen möchten.

Außerdem ist es wichtig zu beachten, dass Dictionary die Einfügereihenfolge nicht beibehält und daher nicht garantiert werden kann, dass die Parameter in der Abfragezeichenfolge genau in dieser Reihenfolge vorliegen.Das sollte keine Rolle spielen, aber falls doch, können Sie das Wörterbuch durch a ersetzen List<KeyValuePair<string, string>> (Bestelltes Wörterbuch sollte auch funktionieren).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top