2009-10-06 23 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); 

這沒有非常可讀的代碼,並且隨着越來越多的參數得到補充,它看起來醜陋,更令人困惑的發現哪個參數適合哪個插槽。

我知道這是一個noob問題,我想我只問如何格式化文本以使其更具可讀性,但如果有更好的方法來做到這一點,我也想知道這一點。

+2

另請參閱:http://stackoverflow.com/questions/1322037/how-can-i-create-a-more-user-friendly-string-format-syntax/1322103#1322103 – 2009-10-06 21:33:17

+0

另外http:// stackoverflow .COM /問題/ 101/命名字符串格式是-IT-可能-C – 2009-10-06 21:35:09

回答

7

你可以看看StringBuilder class和幾行分割字符串的組裝。

AppendFormat method(感謝喬爾)是你在這種情況下想要的。

+0

特別是作爲的String.Format()調用創建一個StringBuilder反正調用幕後的AppendFormat()方法。 – 2009-10-06 21:33:38

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請求,所以我幾乎可以保證它不會成爲瓶頸。

也可以將最後一行拉出到擴展方法中,您可以隨時使用這種擴展方法來構建像這樣的查詢字符串。

此外,重要的是要注意,由於Dictionary不保留插入順序,因此不能保證查詢字符串中的參數將按照該確切順序。這不應該的問題,但如果它確實可以用List<KeyValuePair<string, string>>OrderedDictionary也應該工作)更換字典。

相關問題