1 ضمیمه
این ارور برای چیه ؟object refrence not set to an instance of an object
سلام دوستان
این برنامه توی اجرا مشکل داره ، کارش اینه که کاربر یه گزینه از منو انتخاب میکنه مثلا : اضافه کردن دانشجو و انتخاب بعدی case 4 برای جستجو بر اساس شماره دانشجویی ، تا اینحا رو درست کار می کنه ولی بعد از اون اگر گزینه دیگه رو انتخاب کنیم اضافه کردن درس یا استاد ، بعد بخواهیم case های مربوط به اونا رو بررسی کنیم باز هم جواب رو نشون میده ولی با این ارور روبرو میشم
object refrence not set to an instance of an object
البته فرقی توی ترتیب انتخاب گزینه ها نیست ، در هر مورد برای کار با case دوم این مشکل رو دارم .
type cast ها رو فکر نمی کنم مشکلی داشته باشن ، مقدار تهی هم ندارم
خط هایی که این ارور رو نشون میده :
case 4 : Console.WriteLine("Student : {0},{1},{2}", s.StName, s.StFamily, s.StID);
case 5 : if (teach.TFamily.Contains(word))
case 6 : if (NumUnit < cs.NumOfUnit)
ببخشید اگه بد توضیح دادم و کدم خیلی طولانیه
static void Main(string[] args)
{
ArrayList arylst = new ArrayList();
Hashtable ht = new Hashtable();
while (true)
{
int menu = ShowMenu();
switch (menu)
{
case 1://Add Student
Console.Write("Number of student? ");
int stNum = int.Parse(Console.ReadLine());
for (int i = 0; i < stNum; i++)
{
Student st = new Student();
Console.Write("Student Name : ");
st.StName = Console.ReadLine();
arylst.Add(st.StName);
Console.Write("Student Family : ");
st.StFamily = Console.ReadLine();
arylst.Add(st.StFamily);
Console.Write("Student ID : ");
st.StID = int.Parse(Console.ReadLine());
arylst.Add(st.StID);
ht[st.StID] = st;
}
break;
case 2://Add Teacher
Console.Write("Number of Teacher? ");
int TNum = int.Parse(Console.ReadLine());
for (int i = 0; i < TNum; i++)
{
Teacher tch = new Teacher();
Console.Write("Teacher Name : ");
tch.TName = Console.ReadLine();
arylst.Add(tch.TName);
Console.Write("Teacher Family : ");
tch.TFamily = Console.ReadLine();
arylst.Add(tch.TFamily);
Console.Write("Teacher ID : ");
tch.Tid = int.Parse(Console.ReadLine());
arylst.Add(tch.Tid);
ht[tch.Tid] = tch;
}
break;
case 3://Add Course
Console.Write("Number of Course? ");
int CNum = int.Parse(Console.ReadLine());
for (int i = 0; i < CNum; i++)
{
Course crs = new Course();
Console.Write("Course Name : ");
crs.CName = Console.ReadLine();
arylst.Add(crs.CName);
Console.Write("Number of Unit : ");
crs.NumOfUnit = int.Parse(Console.ReadLine());
arylst.Add(crs.NumOfUnit);
ht[crs.NumOfUnit] = crs;
}
break;
case 4://Search Student
Console.Write("Student ID for search : ");
int idforSearch = int.Parse(Console.ReadLine());
if (arylst.Contains(idforSearch))
if (ht.ContainsKey(idforSearch) == true)
{
Student s = ht[idforSearch] as Student;
Console.WriteLine("Student : {0},{1},{2}", s.StName, s.StFamily, s.StID);
}
break;
case 5://Search Teacher
Console.Write("Word for search : ");
string word = Console.ReadLine();
foreach (DictionaryEntry item in ht)
{
Teacher teach = item.Value as Teacher;
if (teach.TFamily.Contains(word))
{
Console.WriteLine("Teacher's family ={0}", teach.TFamily);
}
}
break;
case 6:
Console.Write("Number to compare with Units of Course : ");
int NumUnit = int.Parse(Console.ReadLine());
foreach (DictionaryEntry item in ht)
{
Course cs = item.Value as Course;
if (NumUnit < cs.NumOfUnit)
Console.WriteLine("Course ={0}", cs.CName);
}
break;
}
}
}
}
}
نقل قول: این ارور برای چیه ؟object refrence not set to an instance of an object
سلام
دقیقاً از کدوم خط خطا می گیره؟
نقل قول: این ارور برای چیه ؟object refrence not set to an instance of an object
توی case های 4و5و6 ، خط هایی رو که بالا گذاشتم .
یعنی نه که همزمان به این سه خط گیر بده ، هرکدم از این case ها رو که برای بار دوم صدا می زنم error میده
ممنون از توجهتون
نقل قول: این ارور برای چیه ؟object refrence not set to an instance of an object
ببین منظورم اینه که Visual Studio کدوم خط رو زرد رنگ می کنه. مثلاً case 1 رو تست کن. احتمال می دم Parse مقدار null بر می گردونه.
نقل قول: این ارور برای چیه ؟object refrence not set to an instance of an object
خطا ها مربوط به case های 4 به بعده ، خط هایی رو که بالا گذاشتم وقتی با break point برنامه رو اجرا می کنم زرد می کنه و این ارور رو نشون میده .
با سه case اول مشکلی ندارم ، بعد از این که داده ها رو با این سه تا کیس پر کردم و بعد یکی از کیس های 4و5و6 رو فراخوانی کنم ، اولین بار بدون مشکل اجرا میشه ولی اگه یکی از سه تا رو برای بار دوم فراخوانی کردم ، ایراد می گیره
نقل قول: این ارور برای چیه ؟object refrence not set to an instance of an object
عذر می خوام شما از همون اول خط ها رو مشخص کردین اما من حواسم نبود.
علت خطا اینه که ht همه نوع شیئی رو در خود نگه می داره و شما سعی داری فارغ از نوع شیء اونو تبدیل به Teacher کنی در حالی که اگه item یک Student باشه نمیشه اونو تبدیل به Teacher کرد باید ابتدا نوعش رو شناسایی بکنی اگه Teacher بود تازه بیای اونو بریزی تو متغیر teach:
foreach (DictionaryEntry item in ht)
{
if(item.Value is Teacher)
{
Teacher teach = item.Value as Teacher;
if (teach.TFamily.Contains(word))
{
Console.WriteLine("Teacher's family ={0}", teach.TFamily);
}
}
}