¿Cuál es el uso más legible de String.format para cadenas largas con muchos parámetros?

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

Pregunta

Por ejemplo:

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

Esto no crea un código muy legible, y a medida que se agregan más y más parámetros, se ve más feo y es más confuso encontrar qué parámetro va en qué ranura.

Sé que esta es una pregunta de novato, y creo que solo estoy pidiendo cómo formatear el texto para que sea más legible, pero si hay una mejor manera de hacer esto, también me gustaría saberlo.

¿Fue útil?

Solución

Podrías mirar el Clase StringBuilder y divide el ensamblaje de la cadena sobre varias líneas.

los Método de formato apéndice (Gracias Joel) es lo que quieres en este caso.

Otros consejos

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

Suponiendo que puede usar Linq, puede llevar sus argumentos a un Dictionary<string, string>, luego unan a los argumentos juntos:

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

Esta será una cantidad minúscula más lenta y más intensiva en memoria que una simple cadena. Format, pero parece que está a punto de hacer una solicitud HTTP, por lo que casi puedo garantizar que no será el cuello de botella.

Esa línea final también se puede sacar en un método de extensión que puede usar en cualquier momento que desee construir una cadena de consulta como esta.

Además, es importante tener en cuenta que, dado que el diccionario no preserva el orden de inserción, no se garantiza que los parámetros en la cadena de consulta estarán en ese orden exacto. Eso no debería importar, pero en caso de que lo haga, puede reemplazar el diccionario con un List<KeyValuePair<string, string>> (Ordenado también debería funcionar).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top