צה הבעיה בקוד הבא:

itaym02

New member
צה הבעיה בקוד הבא:

הקומפיילר אומר לי שאני משתמש במשתנה לא מאותחל בשורה שאני אסמן ב*****************. פתרתי את הבעיה על-ידי הוספת איתחול, אך לא ברורה לי הסיבה לכך. Inventory הוא ArrayList.
public bool equipItem (string item_name) { Item TempItem; //Check Item exists in inventory for(int index=0;index<Inventory.Count;index++) { TempItem = (Item)Inventory[index]; if (TempItem.ItemName==item_name && isItemWeaponORArmor(TempItem)) { Inventory.RemoveAt(index); break; }//END OF IF }//END OF FOR //Check if item is Weapon ->switch between weapons if (TempItem is Weapon)//************TEMPITEM is the problem { //Check if Actor has weapon if (ActorWeapon==null) { ActorWeapon=(Weapon)TempItem; } else { swapItems(TempItem,ActorWeapon); Inventory.Add(TempItem); } return true; }//END OF FIRST BIG IF​
 
תשובה

הקומפיילר של NET. אינו מאפשר שימוש במשתנים לא מאותחלים (בכך הוא שונה מהקומפיילר של C ודומה לזה של JAVA). לכן, אם אתחול המשתנה הוא מותנה (כמו בדוגמה שלך) והשימוש בערך המשתנה הוא לא מותנה, הקומפיילר יחזיר שגיאה, כיוון שהוא לא יכול להיות בטוח שהמשתנה אכן מאותחל בנקודה שבה מנסים להשתמש בו. לכן, גם אם אתה בטוח שמבחינה לוגית אין סיכוי שתשתמש במשתנה לא מאותחל, אתה חייב לאתחל אותו בשורה לא מותנית (אפילו ל - null).
 
למעלה