C#: السلاسل
1. الإعلان والتهيئة
string هو اسم مستعار لـ System.String، وهو نوع مرجعي غير قابل للتغيير. وبمجرد إنشاء السلسلة، لا يمكن تغيير محتواها.
▶ مثال
string name = "Hello";
string empty = "";
string nullStr = null;
string fromChar = new string('A', 5);
Console.WriteLine(name);
Console.WriteLine(fromChar);
Hello
AAAAA
2. ثبات السلاسل
بمجرد إنشاء كائن سلسلة، لا يمكن تعديل تسلسل أحرفه. فجميع عمليات «التعديل» تُرجع سلسلة جديدة، تاركة السلسلة الأصلية دون تغيير.
▶ مثال
string a = "Hello";
string b = a;
a = a + " World";
Console.WriteLine(a);
Console.WriteLine(b);
Hello World
Hello
نصيحة: لا يزال b يشير إلى "Hello" الأصلي، بينما يُنشئ a + " World" كائن سلسلة جديدًا تمامًا.
3. ربط السلاسل
استخدم عامل + أو String.Concat() أو String.Join() لدمج عدة سلاسل.
▶ مثال
string s1 = "Hello" + " " + "World";
string s2 = String.Concat("A", "B", "C");
string s3 = String.Join(", ", new string[] { "apple", "banana", "cherry" });
Console.WriteLine(s1);
Console.WriteLine(s2);
Console.WriteLine(s3);
Hello World
ABC
apple, banana, cherry
4. الاستيفاء في السلاسل
استخدم صيغة الاستيفاء $"" أو String.Format() لتضمين المتغيرات داخل سلسلة نصية.
▶ مثال
string name = "Alice";
int age = 25;
string s1 = $"My name is {name}, age {age}.";
string s2 = String.Format("My name is {0}, age {1}.", name, age);
string s3 = $"2 + 3 = {2 + 3}";
Console.WriteLine(s1);
Console.WriteLine(s2);
Console.WriteLine(s3);
My name is Alice, age 25.
My name is Alice, age 25.
2 + 3 = 5
نصيحة: يمكنك كتابة أي تعبير بلغة C# داخل أقواس الاستيفاء {}، وإضافة محددات التنسيق مثل {value:F2}.
5. مقارنة السلاسل
يقوم المشغل == بإجراء مقارنة المساواة في القيمة بين السلاسل (وليس مقارنة المراجع). أما المشغلات Equals() وCompare() وCompareOrdinal() فتوفر تحكمًا أكثر دقة.
▶ مثال
string a = "hello";
string b = "hello";
string c = "HELLO";
Console.WriteLine(a == b);
Console.WriteLine(a.Equals(b));
Console.WriteLine(String.Compare(a, c, StringComparison.OrdinalIgnoreCase) == 0);
Console.WriteLine(String.CompareOrdinal(a, c) > 0);
True
True
True
True
تحذير: تقوم السلسلة == بمقارنة القيم، وليس المراجع، وهو ما يختلف عن سلوك معظم أنواع المراجع الأخرى.
6. الطرق الشائعة: الطول / السلسلة الفرعية / الاستبدال / التقسيم
هذه هي الطرق الأكثر استخدامًا في العمليات اليومية على سلاسل الأحرف.
▶ مثال
string s = "Hello, World!";
Console.WriteLine(s.Length);
Console.WriteLine(s.Substring(7));
Console.WriteLine(s.Substring(0, 5));
Console.WriteLine(s.Replace("World", "C#"));
string parts = "a,b,c";
foreach (string p in parts.Split(','))
{
Console.WriteLine(p);
}
13
World!
Hello
Hello, C#!
a
b
c
7. الطرق الشائعة: Trim / Contains / Index
تقوم Trim() بإزالة المسافات البيضاء في بداية ونهاية السلسلة، وتقوم Contains() بالبحث عن سلسلة فرعية، بينما تقوم IndexOf() وLastIndexOf() بتحديد المواقع.
▶ مثال
string s = " Hello World ";
Console.WriteLine($"[{s.Trim()}]");
Console.WriteLine(s.Contains("World"));
Console.WriteLine(s.IndexOf("World"));
Console.WriteLine(s.LastIndexOf("o"));
[Hello World]
True
8
7
8. الطرق الشائعة: Case / StartsWith / EndsWith / Pad / Remove / Insert
طرق أكثر عملية لمعالجة السلاسل.
▶ مثال
string s = "Hello";
Console.WriteLine(s.ToUpper());
Console.WriteLine(s.ToLower());
Console.WriteLine(s.StartsWith("Hel"));
Console.WriteLine(s.EndsWith("llo"));
Console.WriteLine("5".PadLeft(3, '0'));
Console.WriteLine("5".PadRight(3, '0'));
string r = "Hello World".Remove(5);
Console.WriteLine(r);
string ins = "H World".Insert(1, "ello");
Console.WriteLine(ins);
HELLO
hello
True
True
005
500
Hello
Hello World
9. السلاسل الحرفية والسلاسل الأولية
لا تعالج السلاسل الحرفية @"" تسلسلات الهروب، مما يجعلها مثالية لمسارات الملفات. وقد أدخلت لغة C# 11 القيم الثابتة للسلاسل الخام """ للمحتوى متعدد الأسطر الذي لا يتطلب استخدام تسلسلات الهروب.
▶ مثال
string path = @"C:\Users\Doc\file.txt";
string json = """
{
"name": "Alice",
"age": 25
}
""";
Console.WriteLine(path);
Console.WriteLine(json.Trim());
C:\Users\Doc\file.txt
{
"name": "Alice",
"age": 25
}
نصيحة: في السلاسل النصية الحرفية، تُكتب علامة الاقتباس المزدوجة على النحو التالي: "". وتبدأ السلاسل النصية الأولية وتنتهي بثلاث علامات اقتباس على الأقل.
10. نظرة عامة على StringBuilder
عند ربط السلاسل بشكل متكرر داخل حلقة، يقوم string بإنشاء كائن جديد في كل مرة، مما يؤثر سلبًا على الأداء. أما StringBuilder فيعمل على مخزن مؤقت داخلي ولا يُنتج السلسلة النهائية إلا مرة واحدة.
▶ مثال
using System.Text;
var sb = new StringBuilder();
for (int i = 0; i < 5; i++)
{
sb.Append(i);
sb.Append(" ");
}
Console.WriteLine(sb.ToString().Trim());
0 1 2 3 4
نصيحة: يُفضل استخدام StringBuilder عند ربط العديد من السلاسل في حلقة لتقليل تخصيصات الذاكرة بشكل كبير.
11. ترميز الأحرف
تستخدم سلاسل الأحرف في لغة C# ترميز UTF-16. ويشغل الحرف char 2 بايت (وحدة ترميز UTF-16 واحدة).
▶ مثال
char ch = 'A';
Console.WriteLine(ch);
Console.WriteLine((int)ch);
Console.WriteLine(sizeof(char));
A
65
2
❓ أسئلة شائعة
== المراجع أم القيم؟== الخاص بالسلاسل لإجراء مقارنة المساواة في المحتوى.string غير قابل للتعديل، فإن كل عملية تسلسل تؤدي إلى إنشاء كائن جديد. أما StringBuilder فيقوم بتعديل المخزن المؤقت ولا يُنشئ السلسلة النهائية إلا في النهاية.@"" والسلسلة العادية؟\n، \t)؛ يتم الاحتفاظ بالشرطات المائلة العكسية حرفياً، مما يجعلها مثالية لمسارات الملفات والتعبيرات العادية.ArgumentOutOfRangeException. يجب عليك التحقق من الطول قبل استدعاء الدالة.📖 ملخص
stringهو نوع مرجعي غير قابل للتغيير واسم مستعار لـSystem.String- التسلسل:
+،String.Concat()،String.Join() - الاستيفاء:
$""وString.Format() - المقارنة:
==تُقارن بين القيم؛ بينما توفرEquals()وCompare()المزيد من الخيارات - الطرق الشائعة:
Length،Substring،Replace،Split،Trim،Contains،IndexOf،ToUpper،ToLower،StartsWith،EndsWith،PadLeft،PadRight،Remove،Insert - السلاسل الحرفية
@""تعطل عملية الهروب؛ أما السلاسل الحرفية الأولية"""فتدعم المحتوى متعدد الأسطر - يُعد
StringBuilderخيارًا مثاليًّا للتسلسل المتكرر في الحلقات، مما يحسّن الأداء - تستخدم السلاسل ترميز UTF-16، ويشغل
char2 بايت
📝 تمارين
- قم بتعريف متغير من نوع السلسلة واستخدم عملية الاستيفاء لإخراج
"My name is XXX, and I am XX years old." - اكتب برنامجًا يأخذ سلسلة أحرف مفصولة بفواصل
"a,b,c,d"، ويقسمها باستخدامSplit، ثم يعرض كل عنصر في سطر منفصل - احذف السلسلة
" Hello World "، ثم استبدل"World"بـ"C#"وأخرج النتيجة - استخدم
StringBuilderلربط الأرقام من 1 إلى 100، بحيث يظهر كل رقم في سطر منفصل، ثم اعرض السلسلة النهائية - حدد مسار ملف في نظام Windows
C:\Program Files\MyApp\config.jsonباستخدام سلسلة نصية حرفية، ثم اعرضه