例如:

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

这并不是很可读的代码,随着越来越多的参数添加,它看起来更丑陋,并且更令人困惑地发现哪个参数进入了哪个插槽。

我知道这是一个菜鸟问题,我认为我只是在要求如何格式化文本更可读,但是如果有更好的方法可以做到这一点,我也想知道这一点。

有帮助吗?

解决方案

你可以看一下 StringBuilder类 并将字符串的组件分成几行。

附录法方法 (谢谢乔尔)在这种情况下您想要的。

其他提示

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

假设您可以使用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>> (订购 也应该有效)。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top