Как наиболее удобно использовать String.Format для длинных строк с большим количеством параметров? - PullRequest
1 голос
/ 07 октября 2009

Например:

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

Это не подходит для очень читабельного кода, и по мере того, как все больше и больше параметров добавляются, это выглядит уродливее и более запутанным, чтобы найти, какой параметр входит в какой слот.

Я знаю, что это нубский вопрос, и я думаю, что я спрашиваю только о том, как отформатировать текст, чтобы сделать его более читабельным, но если есть лучший способ сделать это, я бы тоже хотел это знать.

Ответы [ 3 ]

7 голосов
/ 07 октября 2009

Вы можете взглянуть на класс StringBuilder и разбить сборку строки на несколько строк.

Метод AppendFormat (спасибо Джоэл) - это то, что вам нужно в этом случае.

1 голос
/ 07 октября 2009
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);
0 голосов
/ 07 октября 2009

Предполагая, что вы можете использовать LINQ, вы можете засунуть свои аргументы в Dictionary<string, string>, а затем соединить аргументы вместе:

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

Это будет на несколько минут медленнее и потребляет больше памяти, чем простая строка. Формат, но похоже, что вы собираетесь сделать HTTP-запрос, поэтому я почти гарантирую, что это не будет узким местом.

Эта последняя строка также может быть извлечена в метод расширения, который вы можете использовать в любое время, когда захотите создать строку запроса, подобную этой.

Кроме того, важно отметить, что, поскольку Словарь не сохраняет порядок вставки, вы не гарантированы, что параметры в строке запроса будут в этом точном порядке. Это не должно иметь значения, но если это так, вы можете заменить словарь на List<KeyValuePair<string, string>> ( OrderedDictionary также должен работать).

...