עבור לתוכן

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 בתוך פונקציה?

פורסם
  • מחבר

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

ארכיון

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

דיונים חדשים