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

C# 对于具有多个参数的长字符串,String.Format最具可读性的用途是什么?,c#,.net,readability,string.format,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,

例如:

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问题,我想我只是想问一下如何将文本的格式设置得更具可读性,但如果有更好的方法,我也想知道

您可以查看并将字符串的组合拆分为几行

(谢谢Joel)就是您在本例中想要的。

您可以查看并将字符串的组合拆分为几行

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

(谢谢Joel)就是您在本例中想要的。

假设您可以使用LINQ,您可以将您的参数放入
字典中,然后将参数连接在一起:

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);
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());
Dictionary args=新字典
{
{“computer”,serviceConfig.computer},
{“ver”,string.Format(“{0}.{1}.{2}”,
serviceConfig.Version.Major,
serviceConfig.Version.Minor,
serviceConfig.Version.Build)},
{“发件人”,用户名},
{“realcomputername”,Environment.MachineName},
{“类型”,类型},
{“Channels”,serviceConfig.ChannelsString},
{“热键”,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不保留插入顺序,因此不能保证查询字符串中的参数将按照该顺序。这不重要,但如果有,您可以用
列表替换字典(也应该可以)。

假设您可以使用LINQ,您可以将参数放入
字典中,然后将参数连接在一起:

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());
Dictionary args=新字典
{
{“computer”,serviceConfig.computer},
{“ver”,string.Format(“{0}.{1}.{2}”,
serviceConfig.Version.Major,
serviceConfig.Version.Minor,
serviceConfig.Version.Build)},
{“发件人”,用户名},
{“realcomputername”,Environment.MachineName},
{“类型”,类型},
{“Channels”,serviceConfig.ChannelsString},
{“热键”,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不保留插入顺序,因此不能保证查询字符串中的参数将按照该顺序。这不要紧,但如果是这样的话,您可以用
列表替换字典(也应该可以用)。

另请参见:另请参见:特别是作为字符串。Format()调用创建StringBuilder并在幕后调用其AppendFormat()方法。特别是作为String.Format()调用调用创建StringBuilder并在幕后调用其AppendFormat()方法。