ما هو الاستخدام الأكثر قراءة ل String.format للحصول على سلاسل طويلة مع العديد من المعلمات؟

StackOverflow https://stackoverflow.com/questions/1528210

سؤال

على سبيل المثال:

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، وأعتقد أنني سأطلب فقط كيفية تهيئة النص لتكون أكثر قابلية للقراءة، ولكن إذا كان هناك طريقة أفضل للقيام بذلك، أود أن أعرف ذلك أيضا.

هل كانت مفيدة؟

المحلول

يمكنك أن تنظر إلى فئة stringbuilder وتقسيم تجميع السلسلة على عدة خطوط.

ال طريقة AppendFormat (شكرا جويل) هو ما تريد في هذه الحالة.

نصائح أخرى

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>> (orderDectionary. يجب أن تعمل أيضا).

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top