توجد آليتان رئيسيتان لتنسيق السلاسل النصية في C#/.NET: استخدام String.Format() وإقحام السلاسل النصية.
تأخذ String.Format() سلسلة نصية (يُشار إليها في التوثيق باسم التنسيق المركّب) تتكوّن من نص ثابت وعناصر نائبة (تُعرف في التوثيق بعناصر التنسيق)، ومن عدد متغيّر من الوسائط. وتُحلّ القيمة المُرجَعة كلَّ عنصر تنسيق باستخدام الوسيط المقابل، ثم تدمج القيم المُحلّة مع النص الثابت.
string.Format("I had {0} bitcoins on {1}, the day I forgot my password.", 55.5, new DateTime(2010, 2, 25));
// => "I had 55.5 bitcoins on 2/25/2010 00:00:00, the day I forgot my password." - US settings
تُعرف هذه الآلية تقنيًا باسم التنسيق المركّب.
تبدأ السلاسل النصية المُقحَمة بالرمز $ وتتضمّن تعبيرات تُقيَّم وقت التشغيل محصورةً بين أقواس معقوفة. وصيغة عنصر التنسيق هي: $"{<interpolationExpression>}". وهي تغني عن الحاجة إلى قائمة وسائط منفصلة. وتُكافئ نتيجتها من الناحية الوظيفية آلية String.Format().
var loadsOf = 55.5;
var thatDay = new DateTime(2010, 2, 25);
$"I had {loadsOf} bitcoins on {thatDay}, the day I forgot my password."
// => "I had 55.5 bitcoins on 2/25/2010 00:00:00, the day I forgot my password." - US settings
النص الواقع بين الأقواس، سواء أكان عنصرًا نائبًا في حالة التنسيق المركّب أم تعبيرًا مُقحَمًا في حالة إقحام السلاسل النصية، يُعرف باسم عنصر التنسيق.
يمكن أن يتكوّن عنصر التنسيق من ثلاثة أجزاء على الأكثر. الجزء الأول هو التعبير الإلزامي أو العنصر النائب للوسيط كما في مثال الكود أعلاه. وإضافة إلى ذلك، هناك محاذاة اختيارية (تُقدَّم بفاصلة ",") و_سلسلة تنسيق نصية_ اختيارية (تُقدَّم بنقطتين ":").
{<interpolationExpression>[,<alignment>][:<formatString>]}
تحدّد المحاذاة طول "الحقل" الذي يوضع فيه النص، ويُحشى بالمسافات من اليسار إذا كانت المحاذاة موجبة أو من اليمين إذا كانت سالبة.
تحدّد سلسلة التنسيق النصية شكل النص الناتج، مثل ما إذا كان ينبغي تضمين فواصل الآلاف في عدد، أو ما إذا كان ينبغي إخراج جزء التاريخ فقط من كائن DateTime.
يوضّح الكود التالي عرض جزء البيانات من كائن DateTime وعدد عشري بالصيغة الأُسّية.
var loadsOf = 55.5;
var thatDay = new DateTime(2010, 2, 25);
$"I had {loadsOf:E} bitcoins on {thatDay:d}, the day I forgot my password."
// => I had 5.550000E+001 bitcoins on 02/25/2010, the day I forgot my password. - US settings
string.Format(
"I had {0:E} bitcoins on {1:d}, the day I forgot my password.",
loadsOf, thatDay)
// => I had 5.550000E+001 bitcoins on 02/25/2010, the day I forgot my password. - US settings
يوجد تنسيق قياسي وتنسيق مخصّص لكلٍّ من الأعداد والتواريخ. ولا يوجد فرق جوهري بين التنسيق المخصّص و_القياسي_ سوى أنك تستطيع تركيب سلاسل تنسيق نصية مخصّصة من حروف التنسيق.
لكل خيط ثقافة افتراضية Thread.CurrentThread.CurrentCulture مغلَّفة في نسخة من CultureInfo. وتحدّد ثقافة الخيط كيفية تنسيق التواريخ والأعداد وفق الاختلافات الإقليمية، مثل الفرق في صيغة التاريخ المعتادة بين المملكة المتحدة DD/MM/YYYY والولايات المتحدة MM/DD/YYYY.
تُطبّق CultureInfo الواجهة IFormatProvider التي يمكن تمريرها إلى بعض التحميلات الزائدة لـ String.Format(). ويمكن استخدام ذلك لتجاوز ثقافة الخيط.
تسمح السلاسل النصية الحرفية بكتابة سلاسل تمتد على عدة أسطر. وتُقدَّم بعلامة @.
string str = @"
See no wretched
quotes everywhere
";
في هذا التمرين، ستساعد حبيبين من المدرسة الثانوية على التعبير عن حبهما على وسائل التواصل الاجتماعي.
يرجى تنفيذ طريقة HighSchoolSweethearts.DisplaySingleLine() الثابتة لتستقبل اسمين وتعرضهما مفصولين بقلب.
يجب أن يكون النص المنسّق بعرض 61 محرفًا، مع وجود القلب في منتصف السلسلة النصية.
جميع الأسماء مضمونة لتتسع بسهولة ضمن عرض السطر.
HighSchoolSweethearts.DisplaySingleLine("Lance Green", "Pat Riley");
// => " Lance Green ♡ Pat Riley "
نفّذ طريقة HighSchoolSweethearts.DisplayBanner() الثابتة، والتي تعرض مجموعتي الأحرف الأولى مفصولتين بعلامة زائد.
HighSchoolSweethearts.DisplayBanner("L. G.", "P. R.");
// see the ascii art below
****** ******
** ** ** **
** ** ** **
** * **
** **
** L. G. + P. R. **
** **
** **
** **
** **
** **
** **
***
*
نفّذ طريقة HighSchoolSweethearts.DisplayGermanExchangeStudents() الثابتة لعرض تاريخ بدء العلاقة والمدة الزمنية لطلاب التبادل الألمان لدينا.
HighSchoolSweethearts.DisplayGermanExchangeStudents("Norbert", "Heidi", new DateTime(2019, 1, 22), 1535.22f);
// => "Norbert and Heidi have been dating since 22.01.2019 - that's 1.535,22 hours"
سجّل في Exercism لتتعلّم وتتقن C# عبر 62 مفهومًا178 تمرينًا، وإرشاد بشري حقيقي، وكل ذلك مجانًا.