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

这不会使代码变得非常可读,并且随着越来越多的参数被添加,它看起来更丑陋,并且更难以找到哪个参数进入哪个槽。

我知道这是一个菜鸟问题,我想我只是在询问如何格式化文本以使其更具可读性,但如果有更好的方法来做到这一点,我也想知道。

4

3 回答 3

7

您可以查看StringBuilder 类并将字符串的程序集拆分为几行。

在这种情况下,AppendFormat 方法(感谢 Joel)是您想要的。

于 2009-10-06T21:31:27.843 回答
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);
于 2009-10-06T21:36:45.557 回答
0

假设您可以使用 LINQ,您可以将参数推入 a 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 不保留插入顺序,因此您不能保证查询字符串中的参数将按照该确切顺序。没关系,但如果确实如此,您可以将 Dictionary 替换为List<KeyValuePair<string, string>>OrderedDictionary也应该工作)。

于 2009-10-06T23:36:26.377 回答