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 を使用できると仮定すると、引数を に押し込んでから、引数を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 に答える