对于带有许多参数的长字符串的String.format最可读性的用途是什么?
-
20-09-2019 - |
题
例如:
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>>
(订购 也应该有效)。
不隶属于 StackOverflow