PDA

View Full Version : سوال: دلیل ارور use unassignd local variable



mohammad_poorghnbar
جمعه 23 شهریور 1397, 11:57 صبح
با سلام...من داخل یک برنامه با ارور use unassignd local variable مواجه شدم با تحقیق فهمیدم که علت ارور مقدار اولیه ندادنه...ولی دلیل علمی این ارور رو متوجه نمیشم که چرا اولیه ندیم ارور میگیره

danialafshari
جمعه 23 شهریور 1397, 18:41 عصر
با سلام
بدون کد چطور راهنمایی کنیم؟

mohammad_poorghnbar
جمعه 23 شهریور 1397, 23:53 عصر
کد برنامه بصورت زیره...دلیل ارور که توی اینترنت جستجو کردم مقدار اولیه ندادنه ولی نمیفهمم چرا وقتی مقدار اولیه نمیدیم خطا میگیره



private void button1_MouseDown(object sender, MouseEventArgs e)
{
string message;
if (e.Button == MouseButtons.Left)
message = "you clicked left button";
else if (e.Button == MouseButtons.Middle)
message = "you clicked middle button";
else if (e.Button == MouseButtons.Right)
message = "you clicked middle button";
message += "(" + e.X.ToString() + "," + e.Y.ToString() + ")";
MessageBox.Show(message);
}

danialafshari
شنبه 24 شهریور 1397, 00:09 صبح
بخاطر این هست که شما + گداشتید یعنی متن قبلی رو + متن جدید کن، خب قبلش چیزی وجود نداره که بخواد +جدید کنه

mohammad_poorghnbar
شنبه 24 شهریور 1397, 00:27 صبح
بخاطر این هست که شما + گداشتید یعنی متن قبلی رو + متن جدید کن، خب قبلش چیزی وجود نداره که بخواد +جدید کنه
زمانی که این برنامه اجرا میشه ما هر کلیکی چه چپ راست یا وسط بکنیم ابتدا پیام داخل message قرار میگیره بعد =+message اجرا میشه پس ابتدا باید داخل message یک پیام قرار داده شده باشه و ما یک مقدار از قبل داریم...

danialafshari
شنبه 24 شهریور 1397, 00:47 صبح
زمانی که این برنامه اجرا میشه ما هر کلیکی چه چپ راست یا وسط بکنیم ابتدا پیام داخل message قرار میگیره بعد =+message اجرا میشه پس ابتدا باید داخل message یک پیام قرار داده شده باشه و ما یک مقدار از قبل داریم...
string message = "";

mr.sirwan
شنبه 24 شهریور 1397, 00:50 صبح
زمانی که این برنامه اجرا میشه ما هر کلیکی چه چپ راست یا وسط بکنیم ابتدا پیام داخل message قرار میگیره بعد =+message اجرا میشه پس ابتدا باید داخل message یک پیام قرار داده شده باشه و ما یک مقدار از قبل داریم...

واسه این وضعیت شما دلیلش به این خاطره که کامپایلر انقد هوشمند نیست که بدونه شما داری روی ابجکت e و پراپرتی buttonش شرط if و else میذاری و نتیجه این شرط ها از سه حالت خارج نیست، در این حالت کامپایلر فرض رو بر بدترین حالت ممکن میذاره که هیچکدوم از سه شرط برقرار نباشن واسه همین متغیر message هیچ مقداری نمیگیره و وقتی به خط 10 میرسه قبلش هیچ مقداری توی message وجود نداره که عمل + رو روش انجام بده و این منطقی نیست پس بهتون ارور میده

اما برای راه حل شما میتونی خودت شرط هارو جوری تعریف کنی که از همین سه حالت خارج نباشه، میتونی به جای else if آخری، فقط بنویسی else و دیگه نیازی به قسمت if نخواهد بود:

string message;
if (e.Button == MouseButtons.Left)
message = "you clicked left button";
else if (e.Button == MouseButtons.Middle)
message = "you clicked middle button";
else

message = "you clicked middle button";
message += "(" + e.X.ToString() + "," + e.Y.ToString() + ")";
MessageBox.Show(message);



توی این کدی که ویرایش کردم حتما یکی از شرط ها اجرا میشه

mohammad_poorghnbar
شنبه 24 شهریور 1397, 00:51 صبح
ممنون...متوجه شدم بخاطر همون =+message هست چون هرچند در محیط اجرایی ابتدا مقدار داخل message قرار میگیره ولی کامپایلر زمان اجرا message رو بدون مقدار اولیه میبینه مشکل با یک else بجای else if اخر هم حل میشه

Mahmoud.Afrad
شنبه 24 شهریور 1397, 00:53 صبح
در زبان سی شارپ باید متغیر محلی توسط برنامه نویس مقداردهی اولیه شود.