C# Cheat Sheet: דף עזר מהיר
עודכן לאחרונה
Hello World ומבנה התוכנית
משפטים ברמה העליונה (מאז .NET 6) מאפשרים לוותר על מחלקת ה-boilerplate.
| רכיב | קוד |
|---|---|
| תוכנית ברמה העליונה | Console.WriteLine("Hello, World!"); |
| ייבוא namespace | using System; |
| נקודת כניסה קלאסית | static void Main(string[] args) { ... } |
| הדפסת שורה | Console.WriteLine("text"); |
| קריאת שורה | string s = Console.ReadLine(); |
| שילוב משתנים במחרוזת (Interpolation) | Console.WriteLine($"Hi {name}"); |
| הערות | // line ו-/* block */ |
טיפוסי נתונים
| טיפוס | תיאור |
|---|---|
int | מספר שלם 32 ביט עם סימן |
long | מספר שלם 64 ביט עם סימן |
double / float | מספרים בנקודה צפה |
decimal | מספר עשרוני בדיוק גבוה (כסף) |
bool | true או false |
char | תו Unicode יחיד |
string | טקסט בלתי ניתן לשינוי |
var | הקומפיילר מסיק את הטיפוס |
int? | טיפוס ערך שיכול להיות null |
משתנים
| פעולה | תחביר |
|---|---|
| הצהרה ואתחול | int x = 5; |
| הסקת טיפוס | var name = "Ada"; |
| קבוע | const double Pi = 3.14159; |
| שדה לקריאה בלבד | readonly int id; |
| טיפוס הפניה שיכול להיות null | string? maybe = null; |
| Null-coalescing | var y = maybe ?? "default"; |
| Null-conditional | int? len = text?.Length; |
בקרת זרימה
| משפט | תחביר |
|---|---|
| If / else | if (x > 0) { ... } else { ... } |
| משפט switch | switch (n) { case 1: ...; break; default: ...; } |
| ביטוי switch | var s = n switch { 1 => "one", _ => "other" }; |
| לולאת while | while (i < n) { ... } |
| לולאת do-while | do { ... } while (i < n); |
| לולאת for | for (int i = 0; i < n; i++) { ... } |
| לולאת foreach | foreach (var item in list) { ... } |
| Break / continue | break; יוצא מהלולאה, continue; מדלג לאיטרציה הבאה |
מתודות
| פעולה | תחביר |
|---|---|
| הגדרת מתודה | int Add(int a, int b) { return a + b; } |
| גוף בביטוי (Expression-bodied) | int Add(int a, int b) => a + b; |
| ללא ערך החזרה | void Greet() { ... } |
| פרמטר אופציונלי | int Pow(int b, int e = 2) { ... } |
| ארגומנטים בשם | Pow(b: 2, e: 3); |
| פרמטר out | bool TryParse(string s, out int n) { ... } |
| מתודה סטטית | static int Square(int x) => x * x; |
| ביטוי Lambda | Func<int, int> f = x => x * 2; |
מחלקות ו-OOP
| פעולה | תחביר |
|---|---|
| הגדרת מחלקה | class Dog { ... } |
| Auto property (property אוטומטי) | public string Name { get; set; } |
| Property לקריאה בלבד | public int Id { get; } |
| בנאי | public Dog(string name) { Name = name; } |
| יצירת אובייקט | var d = new Dog("Rex"); |
| ירושה | class Puppy : Dog { ... } |
| ממשק (Interface) | interface IRunnable { void Run(); } |
| דריסת מתודה | public override void Speak() { ... } |
| Record (בלתי ניתן לשינוי) | record Point(int X, int Y); |
Collections
Collections גנריים מתוך System.Collections.Generic.
| טיפוס | שימוש ודוגמה |
|---|---|
List<T> | מערך דינמי: list.Add(1); list.Count; |
Dictionary<K, V> | מפתח-ערך: dict["a"] = 1; dict.ContainsKey("a"); |
HashSet<T> | ערכים ייחודיים: set.Add(5); set.Contains(5); |
Queue<T> | FIFO: q.Enqueue(x); q.Dequeue(); |
Stack<T> | LIFO: s.Push(x); s.Pop(); |
| מערך | int[] nums = { 1, 2, 3 }; |
| אתחול collection | var l = new List<int> { 1, 2, 3 }; |
| מעבר על dictionary | foreach (var kv in dict) { kv.Key; kv.Value; } |
LINQ
שאילתות זורמות על collections; מתוך System.Linq.
| פעולה | תחביר |
|---|---|
| סינון | nums.Where(n => n > 0) |
| הטלה / מיפוי | nums.Select(n => n * 2) |
| מיון | nums.OrderBy(n => n) / OrderByDescending(...) |
| ההתאמה הראשונה | nums.First(n => n > 5) / FirstOrDefault(...) |
| Any / All (האם יש / האם כולם) | nums.Any(n => n < 0) / nums.All(n => n > 0) |
| ספירת התאמות | nums.Count(n => n > 0) |
| צבירה | nums.Sum(), nums.Max(), nums.Average() |
| קיבוץ | items.GroupBy(i => i.Category) |
| המרה לאוסף ממשי | .ToList() / .ToArray() |
דפוסים נפוצים (properties, async)
| דפוס | תחביר |
|---|---|
| מתודה אסינכרונית | async Task<int> GetAsync() { ... } |
| המתנה ל-task | var result = await GetAsync(); |
| Try / catch | try { ... } catch (Exception e) { ... } |
| Finally | finally { ... } תמיד רץ |
| Using (שחרור משאבים) | using var file = File.OpenRead(path); |
| עיצוב מחרוזות | $"Total: {amount:C}" |
| מחלקה גנרית | class Box<T> { public T Value; } |
| Pattern matching | if (obj is Dog d) { d.Bark(); } |
התחביר, ה-collections ושאילתות ה-LINQ של C# שהכי שימושיים, בעמוד אחד. ה-C# cheat sheet הזה הוא דף עזר מהיר לכתיבת C#: טיפוסי הנתונים, בקרת זרימה, מחלקות, ה-collections List/Dictionary, LINQ, ודפוסי ה-properties וה-async שמאפיינים קוד .NET אידיומטי.
כל מה שכאן הוא C# סטנדרטי על .NET ורץ עם ה-CLI של dotnet. העתיקו את מה שצריך, או נסו כל קטע קוד בזמן אמת בעורך האונליין של C#, בלי להתקין SDK.
שאלות נפוצות על ה-C# cheat sheet
האם ה-C# cheat sheet הזה בחינם?
מה ההבדל בין טיפוסי ערך לטיפוסי הפניה ב-C#?
int, double, bool, struct, enum) מחזיקים את הנתונים שלהם ישירות ומועתקים בהשמה או בהעברה למתודה: שינוי של העותק לא משפיע על המקור. טיפוסי הפניה (class, string, מערכים, List<T>) מחזיקים הפניה לנתונים ב-heap, כך ששני משתנים יכולים להצביע על אותו אובייקט ושינוי דרך אחד מהם נראה גם דרך השני. string הוא טיפוס הפניה, אבל מתנהג כבלתי ניתן לשינוי.מה זה LINQ ומתי כדאי להשתמש בו?
Where, Select ו-OrderBy שמאפשרות לסנן, לשנות ולצבור collections בשרשרת קריאות ברורה, במקום לולאות ידניות. השתמשו בו בכל פעם שהייתם כותבים לולאה כדי לבנות רשימה מסוננת או ממופה: הוא תמציתי ומחושב בעצלות עד שקוראים ל-ToList() או עוברים עליו.