هل هناك طريقة لتقليل فعل استخدام string.format (... ، p1 ، p2 ، p3)؟

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

  •  03-10-2019
  •  | 
  •  

سؤال

كثيرا ما أستخدم String.Format() لأنه يجعل بناء السلاسل أكثر قابلية للقراءة ويمكن التحكم فيه.

هل هناك على أي حال لتقليل فعله النحوي ، على سبيل المثال مع طريقة التمديد ، وما إلى ذلك؟

Logger.LogEntry(String.Format("text '{0}' registered", pair.IdCode));

public static void LogEntry(string message)
{
    ...
}

على سبيل المثال ، أود استخدام جميع الأساليب الخاصة بي وغيرها التي تتلقى سلسلة بالطريقة التي أستخدمها Console.Write(), ، على سبيل المثال:

Logger.LogEntry("text '{0}' registered", pair.IdCode);
هل كانت مفيدة؟

المحلول

ماذا عن:

static void LogEntry(string format, params object[] args) {
    Console.WriteLine(format, args); // For example.
}

الآن يمكنك أن تسميها مثل هذا:

Logger.LogEntry("text '{0}' registered", pair.IdCode);

نصائح أخرى

إذا كنت تتحكم في Logger.LogEntry الطريقة ، يمكنك ببساطة إضافة تحميل زائد يشمل string.format. فقط أعلن المعلمة الثانية باعتبارها paramarray وأنت على ما يرام!

نعم ، يمكنك إنشاء طريقة تمديد اسمها Formatith ، والتي تتيح لك أن تقول أشياء مثل:

Logger.LogEntry("I hate my {0}".FormatWith(itemName));

يجب أن يكون الأمر سهلاً بما يكفي لدحث خاص بك ، ولكن إليك مثال: http://james.newtonking.com/archive/2008/03/27/formatwith-string-format-extension-method.aspx

إذا Logger.LogEntry هي طريقة ثابتة خارج سيطرتك ، ثم لا ؛ يمكنك فقط إضافة طرق تمديد إلى الحالات. إذا كان نوعك ، يمكنك إضافة:

public static void LogEntry(string format, params object[] args) {
    ... string.Format(format,args) ...
}

يمكنك استخدام الكلمة الرئيسية Params لدمج جميع الوسائط بعد الوسيطة الأولى في صفيف وتمرير تلك الصفيف إلى String.Format.

static void FormatString(string myString, params string[] format)
{
     Console.WriteLine(String.Format(myString, format));
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top