יש לי תקלה בשפת C#
.
התוכנית:
string Key = Console.ReadLine();
for(int i=0; i < Key.Length; i++) {
if (Key[i] = "e") {
Key[i] = "z";
}
}
יש למישהו מושג איך לתקן את זה?
יש לי תקלה בשפת C#
.
התוכנית:
string Key = Console.ReadLine();
for(int i=0; i < Key.Length; i++) {
if (Key[i] = "e") {
Key[i] = "z";
}
}
יש למישהו מושג איך לתקן את זה?
אופרטור שווה יחיד “=
” הוא אופרטור השמה בשפת C#
. זה בדיוק כמו שניסית להשתמש במקרה Key[i]="z"
. בפקודה המותנית (תנאי ה-if
) אתה צריך להשוואות תנאי ולכן אתה צריך להשתמש באופרטור שמחזיר ערך בוליאני (ובפרט באופרטור “==
”). אולם גם שינוי זה לא יתקן את התוכנית. המשתנה Key
הוא מטיפוס מחרוזת (String
) ואילו הליטרל "e"
הוא מטיפוס תו (char
). כל פעם שאתה ניגש לאינדקס כלשהו במחרוזת, יוחזר ערך מטיפוס תו ולא מחרוזת. לכן אתה צריך לעטוף את הליטרל בעזרת גרש יחיד, כלומר 'e'
במקום "e"
. אותו הדבר גם עבור השורה Key[i]='z'
. עד כאן השינויים הם:
string Key = Console.ReadLine();
for(int i=0; i < Key.Length; i++) {
if (Key[i] == 'e') {
Key[i] = 'z';
}
}
אולם גם זה לא יעזור שכן מחרוזות בשפת C#
לא ניתנות לשינוי (נקראות immutable
). אם תנסה להכניס תו חדש לאחד האינדקסים של המחרוזות אתה תקבל את השגיאה הבאה:
Property or indexer ‘string.this[int]’ cannot be assigned to — it’s read only
למעשה, אם נסתכלה-API
הציבורי, ניתן למצוא:
public char this[int index] { get; }
במקום זאת, אתה תצטרך לבנות מחרוזת חדשה עם השינוי שאתה מעוניין לבצע. ישנן מספר דרכים לקבל התנהגות כזאת. כך לדוגמה, ניתן להשתמש ב-StringBuilder
בדרך דומה שניסית.
מקווה שמובן