string interpolation בונה מחרוזת מטקסט מילולי ומביטויים. הוסיפו לליטרל את הקידומת $, שימו כל ביטוי C# בסוגריים מסולסלים, והערך שלו יומר לטקסט ויוכנס:
פלט:
Hello, Maya!
3 items at 4.5 = 13.5
Name has 4 letters, upper: MAYA
Free shipping: yes
אינטרפולציה הגיעה ב-C# 6. הקומפיילר הופך אותה לקריאה ל-string.Format או ל-string.Concat (או, מאז C# 10, לקוד handler יעיל יותר), כך שהיא לא איטית יותר מבניית המחרוזת ביד.
הביטוי המותנה בשורה האחרונה צריך סוגריים. בתוך חור אינטרפולציה, נקודתיים מתחילים מפרט עיצוב, ולכן {x > 10 ? "yes" : "no"} בלי סוגריים הוא שגיאת קומפילציה.
מפרטי עיצוב
אחרי הביטוי, נקודתיים ומחרוזת עיצוב קובעים איך הערך ייכתב. אותן מחרוזות עיצוב עובדות עם ToString("...") ועם string.Format.
פלט:
1234567.89
1,234,567.89
1,234,568
00042
FF
00ff
1.23E+006
0.813
81.3%
1,234,567.89
007.5
3.1
הקודים הסטנדרטיים, שאחרי כל אחד מהם אפשר להוסיף מספר דיוק:
| קוד | שם | דוגמה | תוצאה |
|---|---|---|---|
F או F2 | נקודה קבועה | {3.14159:F2} | 3.14 |
N או N0 | מספר עם מפרידי קבוצות | {1234.56:N0} | 1,235 |
C | מטבע (הסמל והתבנית של התרבות) | {9.5:C} ב-en-US | $9.50 |
D5 | מספר שלם מרופד באפסים | {42:D5} | 00042 |
X, x | הקסדצימלי | {255:X} | FF |
E2 | מדעי | {1234.5:E2} | 1.23E+003 |
P1 | אחוז (מכפיל ב-100) | {0.256:P1} ב-en-US | 25.6% |
G | כללי (הקצר ביותר) | {2.50m:G} | 2.50 |
R | הלוך ושוב (double) | {0.1:R} | 0.1 |
תבניות מותאמות בונות עיצוב ממצייני מקום: 0 היא ספרה שתמיד מוצגת, # היא ספרה שמוצגת רק אם היא משמעותית, . היא הנקודה העשרונית, , בתוך המספר מפעיל מפרידי קבוצות, ו-% מכפיל ב-100. "0.##" מציג עד שתי ספרות אחרי הנקודה ומשמיט אפסים בסוף; "#,##0.00" הוא עיצוב הנהלת החשבונות הקלאסי.
כל עיצוב מספרי מעגל את הערך המוצג; המשתנה עצמו לא משתנה. כשערך נמצא בדיוק באמצע (2.25 שמוצג עם ספרה אחת אחרי הנקודה), סביבות ריצה וטיפוסים שונים יכולים לעגל את המקרה הזה אחרת, אז אם הכלל חשוב, עגלו קודם במפורש עם Math.Round(value, 1, MidpointRounding.AwayFromZero) ורק אז עצבו.
תאריכים באינטרפולציה
ערכי DateTime מקבלים מחרוזות עיצוב של תאריכים באותה דרך:
פלט:
2026-09-24
24/09/2026 16:05
Thu, Sep 24
Shipped at 16:05 on Thursday
ETA 02:10
2.2 hours
עיצוב מותאם של TimeSpan מחייב בריחה של תווים מילוליים עם לוכסן הפוך, שבליטרל מחרוזת רגיל נכתב \\:. הרשימה המלאה של קודי התאריך (yyyy, MM, HH, tt...) והטעויות שאנשים עושים איתם (mm הוא דקות, MM הוא חודשים) נמצאות בדף על עיצוב DateTime.
יישור וריפוד
פסיק אחרי הביטוי קובע רוחב שדה מינימלי. מספר חיובי מיישר לימין, מספר שלילי מיישר לשמאל. בשילוב עם עיצוב, זה מסדר טבלאות בטקסט פשוט:
פלט:
Item | Price| Sold
----------------------------
Espresso | 2.40| 118
Latte | 3.60| 64
Hot chocolate | 4.25| 9
התחביר הוא {expression,alignment:format}: קודם היישור, אחר כך העיצוב. ערך ארוך מהרוחב לא נחתך; הוא דוחף את שאר השורה הלאה. PadLeft ו-PadRight מבצעים את אותו ריפוד מחוץ לאינטרפולציה.
בריחה של סוגריים מסולסלים
כדי להדפיס סוגר מסולסל מילולי, הכפילו אותו: {{ ו-}}. זה עולה כשהפלט הוא JSON, CSS או קוד:
פלט:
{ "id": 42, "name": "Ana" }
Set literal: {1, 2, 3}
{42}
בניית JSON ביד בצורה כזו מתאימה לשורת לוג מהירה; ל-JSON אמיתי השתמשו בסריאלייזר, שמטפל נכון במירכאות ובתווים מיוחדים בתוך name.
string.Format ועיצוב מורכב
לפני C# 6, עיצוב נעשה עם string.Format, שמקבלת מצייני מקום ממוספרים ורשימת ארגומנטים. אותו תחביר של עיצוב מורכב מתקבל על ידי Console.WriteLine, StringBuilder.AppendFormat ו-TextWriter.Write:
פלט:
Notebook x4: 14.00
Notebook | 3.50
echo echo !
Dear Leo, your order #000731 has shipped.
העדיפו אינטרפולציה בקוד: הערכים יושבים במקום שבו הם מופיעים, כך שמציין מקום לא יכול להצביע על הארגומנט הלא נכון. string.Format נשארת הכלי הנכון כשהתבנית היא נתונים, כמו הודעה מתורגמת שנטענת מקובץ משאבים. אינדקס של מציין מקום בלי ארגומנט מתאים ({2} עם שני ארגומנטים) זורק FormatException בזמן ריצה.
תרבות: שליטה במפרידים ובמטבע
אינטרפולציה, ToString ו-string.Format משתמשים כולם כברירת מחדל בתרבות הנוכחית של התהליכון. במחשב שמוגדר לגרמנית, {1234.5:N2} מפיק 1.234,50; בארצות הברית הוא מפיק 1,234.50. עיצוב המטבע C משתמש בסמל של התרבות. כדי לבחור את התרבות במפורש, שמרו את מחרוזת האינטרפולציה כ-FormattableString ועצבו אותה עם provider:
פלט:
Total: 1,234.50
Total: 1.234,50
$1,234.50
1.234,50
1234.5,0.75
השתמשו בתרבות של המשתמש לטקסט שאנשים קוראים, וב-CultureInfo.InvariantCulture לכל דבר שתוכנית אחרת קוראת. קובץ CSV שנכתב עם התרבות הנוכחית במחשב גרמני מכיל פסיקים בתוך מספרים ובלתי קריא במקומות אחרים. ב-.NET 6 ואילך, string.Create(CultureInfo.InvariantCulture, $"...") עושה את אותו הדבר כמו FormattableString.Invariant בלי אובייקט הביניים.
מחרוזות אינטרפולציה verbatim ו-raw
$ משתלב עם @ למחרוזת אינטרפולציה verbatim: לוכסנים הפוכים הם מילוליים והמחרוזת יכולה להשתרע על פני כמה שורות. C# 8 ואילך מקבלות כל סדר ($@ או @$); C# 6 ו-7 דורשות $@:
פלט:
C:\Users\ana\Reports\2026\summary.txt
Report for ana
Year: 2026
C# 11 הוסיפה מחרוזות אינטרפולציה raw. עם $ אחד, סוגריים מסולסלים מסמנים ביטויים כרגיל. עם $$, סוגר מסולסל בודד הוא מילולי וביטויים צריכים שני סוגריים, וזה הופך תבניות JSON וקוד לקריאות:
// C# 11 and later
int id = 42;
string name = "Ana";
string json = $$"""
{
"id": {{id}},
"name": "{{name}}"
}
""";
C# 11 מתירה גם שורות חדשות בתוך חור אינטרפולציה, כך שאפשר לפצל ביטוי ארוך או ביטוי switch על פני כמה שורות.
טעויות נפוצות
- שכחה של ה-
$."Total: {total}"מדפיס את הסוגריים המסולסלים כמו שהם. הקומפיילר לא מזהיר. - אופרטור טרנרי בלי סוגריים בתוך הסוגריים המסולסלים: הנקודתיים נקראים כמפריד עיצוב.
- עיצוב פלט שמכונות קוראות עם התרבות הנוכחית. פסיקים עשרוניים שוברים CSV, JSON ו-SQL. השתמשו בתרבות הבלתי תלויה.
- שימוש ב-
ToString()בלי עיצוב לסכומי כסף.2.5mמודפס כ-2.5, לא2.50. השתמשו ב-F2, ב-N2או ב-C. - בניית מחרוזות גדולות עם אינטרפולציה בתוך לולאה. כל איטרציה יוצרת מחרוזת חדשה; השתמשו ב-StringBuilder או ב-
string.Join.
שאלות נפוצות
מה זה string interpolation ב-C#?
ליטרל מחרוזת עם הקידומת $ שבו ביטויים בתוך סוגריים מסולסלים מחושבים ומוכנסים: $"Total: {price * qty}". הוא נוסף ב-C# 6 ומחליף את רוב השימושים ב-string.Format ובשרשור עם +. כל ביטוי עובד בתוך הסוגריים, כולל קריאות למתודות וגישה למאפיינים.
איך מעצבים מספר לשתי ספרות אחרי הנקודה ב-C#?
הוסיפו מפרט עיצוב אחרי נקודתיים: $"{price:F2}" מדפיס 2 ספרות אחרי הנקודה העשרונית, ו-$"{price:N2}" עושה אותו דבר עם מפרידי אלפים. מחוץ לאינטרפולציה, אותם קודים עובדים עם price.ToString("F2"). שניהם מעגלים את הערך לתצוגה בלי לשנות אותו.
איך מבצעים בריחה לסוגריים מסולסלים במחרוזת אינטרפולציה ב-C#?
הכפילו אותם: {{ מדפיס { ו-}} מדפיס }. לדוגמה $"{{ \"id\": {id} }}" מדפיס { "id": 42 }. במחרוזות אינטרפולציה raw של C# 11, אפשר במקום זאת להתחיל את הליטרל ב-$$, כך שסוגריים בודדים הם מילוליים ו-{{expr}} מסמן ביטוי.
מה ההבדל בין string.Format ל-string interpolation?
הם מפיקים את אותה תוצאה עם אותם קודי עיצוב. string.Format("{0} costs {1:F2}", name, price) מתייחס לארגומנטים לפי מיקום; $"{name} costs {price:F2}" שם את הביטויים בתוך הטקסט, ולכן הוא קל יותר לקריאה ולא יכול לבלבל את סדר הארגומנטים. string.Format עדיין נחוץ כשמחרוזת העיצוב עצמה מגיעה מקובץ משאבים או ממסד נתונים.
למה המספר במחרוזת האינטרפולציה מוצג עם פסיק במקום נקודה?
אינטרפולציה מעצבת לפי התרבות הנוכחית של התהליכון, ובתרבויות רבות הפסיק הוא המפריד העשרוני. לפלט שמכונות קוראות (קבצים, JSON, כתובות URL), עצבו עם התרבות הבלתי תלויה (invariant): FormattableString.Invariant($"{value:F2}"), או ב-.NET 6 ואילך string.Create(CultureInfo.InvariantCulture, $"...").