2009-10-06 9 views
1

Например:Какое наиболее читаемое использование String.Format для длинных строк со многими параметрами?

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

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

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

+2

См. Также: http://stackoverflow.com/questions/1322037/how-can-i-create-a-more-user-friendly-string-format-syntax/1322103#1322103 –

+0

Также http: // stackoverflow .com/questions/1010123/named-string-format-is-it-possible-c –

ответ

7

Вы можете посмотреть на StringBuilder class и разделить сборку строки на несколько строк.

AppendFormat method (спасибо Joel) - это то, что вы хотите в этом случае.

+0

Тем более, что вызовы String.Format() создают StringBuilder и в любом случае называет метод AppendFormat() за кулисами. –

1
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

Предполагая, что вы можете использовать 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()); 

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

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

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