对于具有许多参数的长字符串,String.Format最具可读性的用途是什么?

时间:2009-10-06 21:29:16

标签: c# .net readability 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问题,我想我只是要求如何格式化文本以使其更具可读性,但如果有更好的方法可以做到这一点,我也想知道。

3 个答案:

答案 0 :(得分:7)

你可以查看StringBuilder class并将字符串的汇编分成几行。

AppendFormat method(感谢Joel)就是你想要的。

答案 1 :(得分: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);

答案 2 :(得分: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也应该有效)。