Quelle est l'utilisation la plus lisible de String.Format pour les longues chaînes avec de nombreux paramètres?

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

Question

Par exemple:

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);

Cela ne fait pas pour le code très lisible, et que de plus en plus de paramètres sont ajoutés, il semble plus laid et est plus difficile à trouver quel paramètre va dans quel emplacement.

Je sais que cela est une question de noob, et je pense que je demande seulement pour savoir comment formater le texte pour être plus lisible, mais s'il y a une meilleure façon de faire, je voudrais savoir aussi.

Était-ce utile?

La solution

Vous pouvez regarder le StringBuilder de classe et de diviser l'ensemble de la chaîne sur plusieurs lignes.

Le AppendFormat de la méthode (merci de Joel) est ce que vous voulez dans ce cas.

Autres conseils

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);

En supposant que vous pouvez utiliser LINQ, vous pouvez pousser vos arguments dans un Dictionary<string, string>, puis rejoindre les arguments ensemble:

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());

Ce sera une certaine quantité miniscule plus lente et plus gourmande en mémoire qu'un string.Format simple, mais il semble que vous êtes sur le point de faire une requête HTTP, donc je peux presque garantir que ce ne sera pas le goulot d'étranglement.

Cette dernière ligne peut également être tiré dans une méthode d'extension que vous pouvez utiliser à tout moment vous voulez construire une chaîne de requête comme celui-ci.

, il est également important de noter que depuis dictionnaire ne conserve pas l'ordre d'insertion, vous n'êtes pas garanti que les paramètres de la chaîne de requête sera dans cet ordre exact. Cela ne devrait pas d'importance, mais dans le cas où il ne vous pouvez remplacer le dictionnaire avec un List<KeyValuePair<string, string>> ( OrderedDictionary devrait aussi fonctionner).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top