PDA

View Full Version : سوال: متود های چند پارامتری



antisocial
دوشنبه 17 فروردین 1388, 18:59 عصر
با سلام
من می خوام بدونم توی متود های چند ورودی و چند خروجی چرا ترای کچ استفاده میکنم ارور میده؟متود هایی که با کلمه ی کلیدی Out تعریف میشن.(منظورم کانسترکتور نیست)
پس چه طور خطا یابیش کنم؟باید به صورت دستی خطایابی کرد؟
ممنون میشم راهنماییم کنید

mohsen_csharp
دوشنبه 17 فروردین 1388, 20:24 عصر
یه نمونه کد بزار.

antisocial
دوشنبه 17 فروردین 1388, 22:33 عصر
private void Form1_Load(object sender, EventArgs e)
{
int P, C;
Power(2, out P, out C);
}
private void Power(int x, out int p, out int c)
{
try
{
p = x * x;
c = x * x * x;
}
catch (Exception Ex)
{
MessageBox.Show(Ex.Message .ToString ());
}
}

اینم نمونه ی کدم.البته این جهت مثاله اما مال خودم مربوط به پایگاه داده میشه.
وگرنه یه همچین متدی که خطایابی نمیخواد
این کد به من اررور میده.برای خطایابیش باید چکار کرد؟
با تشکر

Happy_davood
سه شنبه 18 فروردین 1388, 09:32 صبح
به نظرم مشکل شما اینه :
استفاده از بلوک Try هیچ ایرادی تو این توابع نداره . فقط باید داخل بلوک Catch هم به پارامتر هایی که از نوع Out هستند حتماً مقداری داده بشه .
به طور کلی تابع نمیتونه بدون مقدار دهی به پارامتر های Out اجراش تموم بشه و Return کنه .
بنابراین داخل Catch هم یه مقداری به این پارامتر ها بدید .

mohsen_csharp
سه شنبه 18 فروردین 1388, 09:48 صبح
دوست عزیز در متدهایی که از پارامترهای out استفاده می شود همیشه باید درون این متد این پارامترها به نحوی مقداردهی شوند حالا شما حالتی را در نظر بگیرید که درون بلاک try قبل از این که این متدها مقداردهی شوند ، یک استثنا رخ دهد و روند اجرای برنامه به قسمت catch انتقال یابد بدون آنکه این پارامترهای out مقداردهی شده باشند.
شما می توانید در ابتدای متد قبل از بلاک try یا درون بلاک catch به این پارامترها مقدار اولیه صفر بدهید.
در ضمن توصیه می شود که مقدار بازگتی تابع bool تعریف شود و اگر کد به درستی اجرا شد شما در انتهای بلاک try مقدار true و یا اگر استثنایی رخ داد مقدار بازگشتی false را در قسمت catch قرار دهید. پس کد شما می تواند اینگونه اصلاح شود:

private void Form1_Load(object sender, EventArgs e)
{
int P, C;
if (Power(2, out P, out C))
MessageBox.Show("successful");
}
private bool Power(int x, out int p, out int c)
{
try
{
p = x * x;
c = x * x * x;
return true;
}
catch (Exception Ex)
{
MessageBox.Show(Ex.Message.ToString());
p = c = 0;
return false;
}
}

Happy_davood
سه شنبه 18 فروردین 1388, 10:36 صبح
جوابی که آقای mohsen_csharp گذاشتن خیلی کامله . مخصوصاً اون قسمت خروجی Bool که یه موضوع مهم و کاربردی بود که برمی گرده به تجربه و دقت ایشون .