עבור לתוכן
View in the app

A better way to browse. Learn more.

HWzone

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

C# - SortedList

Featured Replies

פורסם

יש לי תרגיל שבו יש לי כל מיני צורות שמורכבות מכמה פרמטים כמו נק' (X ו-Y) רדיוס למשל ו-ID לכל צורה

אני אמור לכתוב קלאס שמחזיק את כל הצורות ב-SortedList.

בשביל זה קודם כל יש לי את מתודת ה-ADD שהיא מוסיפה צורה ל-SortedList.

קודם כל ב-MAIN אני יוצר צורות כמובן.

עכשיו יש לי את הקלאס שאמור להחזיק את הצורות ב-SortedList


public class Can
{
SortedList mSortedList;


public Can(SortedList shortedList)
{
this.mSortedList = shortedList;
}


public void Add(Shape shape)
{
string[] split = shape.ToString().Split(new char[] { ' ' });
string shapeID = split[2];
this.mSortedList.Add(shape.id, shape);
}
}

ב-MAIN אני רושם (אחרי שיצרתי אובייקטים של צורות):


SortedList mySL = new SortedList();
Can can = new Can(mySL);
can.Add(s1);

S1 זו צורה אגב, הבעיה שלי היא במתודת ADD, איך שאני מריץ את התוכנית בשורה של ההוספת צורה:

this.mSortedList.Add(shape.id, shape);

אני מקבת את השגיאה Key cannot be null.

Parameter name: key

אני לא מבין מה שאני אמור להכניס לשם, אני בעיקרון חילצתי את ה-ID של האובייקט המסויים שאני רוצה להכניס (סוג של String על מספרים) וזה נופל לי על השגיאה.

פורסם

מה לא ברור? הוא אומר לך ש-shape.id הוא null.

שים לב שב-Add אתה יוצר את shapeID אבל אז לא משתמש בו.

פורסם
  • מחבר

אוקיי תודה הסתדרתי, ועוד משהו קטן:

המתודה Draw אמורה להדפיס את כל ה-SortedList, כשאני עושה ב-MAIN את הפקודה can.Draw לא מודפס לי כלום, אם אני בודק בדיבגר אני רואה שבמתודה Draw ב-SortedList קיימים כל האובייקטים שהכנסתי אבל למה זה לא מדפיס אותם ?


public class Can
{
SortedList mSortedList;


public Can(SortedList shortedList)
{
this.mSortedList = shortedList;
}


public void Add(Shape shape)
{
string[] split = shape.ToString().Split(new char[] { ' ' });
string shapeID = split[2];
this.mSortedList.Add(shapeID, shape);
}


public string Draw()
{
return this.mSortedList.ToString();
}
}

פורסם

א. מי אמר ש-ToString של SortedList עושה מה שאתה מצפה ממנה לעשות?

ב. אתה רק קורא ל-can.Draw, או שאתה גם מדפיס את התוצאה?

נ.ב. אמרתי זאת בעבר ואומר זאת שוב - אין צורך להשתמש ב-this בשביל לגשת לאיברים פנימיים של המחלקה, אלא אם זה על מנת למנוע כפילות (כלומר אם יש משתנה מקומי באותו שם).

פורסם
  • מחבר

גם כשאני רושם משהו כמו:


string result = can.Draw();
Console.WriteLine(result);

זה לא מדפיס לי, איך מדפיסים בכלל SortedList ?

ניסיתי להסתכל קצת ב-MSDN ולא מצאתי משהו שעזר לי.

פורסם

תניח שאין לרשימה פונקציית ToString ותחשוב בעצמך איך מדפיסים את איבריה.

פורסם
  • מחבר

אם אני רוצה להדפיס את ה-SHAPE הראשון (שלו יש ToString) שיש לי ב-SortedList, איך אני ניגש לאיבר הראשון ב-SortedList ?

ניסיתי עם אחד ה-Properties שיש ל-SortedList אבל לא הצלחתי.

פורסם
  • מחבר

שיניתי קצת את ה-Class אבל עדיין לא מצליח לי העניין של ה-Draw, יש מצב שאתה לפחות מתחיל לרשום עלמנת שאני יבין יותר ?


public class Can
{
SortedList<string, Shape> mSortedList;


public void Add(string id, Shape shape)
{
mSortedList.Add(id, shape);
}


public string Draw()
{


}
}

פורסם
  • מחבר

קראתי ולא עזר לי כנראה.

פורסם

את הדוגמה הזו ראית?

foreach( KeyValuePair<int, string> kvp in mySortedList ) {
Console.WriteLine("Key = {0}, Value = {1}", kvp.Key, kvp.Value);
}

פורסם
  • מחבר

תודה רבה, אגב למה ה-foreach מדפיס לי רק את ה-Shape הראשון ב-SortedList ולא את כולו ?

כשאני רושם:


public string Draw()
{
foreach (KeyValuePair<string, Shape> item in mSortedList)
{
return item.Value.ToString();
}
}

הוא מצפה לעוד החזרת ערך בסוף, מה אני אמור לרשום ?

פורסם

מה עושה return?

כמה ערכים פונקציה יכולה להחזיר?

מה קורה כשיש לך כמה פעמים return בתוך פונקציה?

פורסם
  • מחבר

אני לא ממש מבין מה אתה שואל, איך אני אמור לרשום את המתודה הזו ?

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

דיונים חדשים

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.