PDA

View Full Version : مدریت چند دستور در یک بلوک try



bpzone
جمعه 23 شهریور 1386, 10:22 صبح
سلام به همگی

وقتی برای چند دستور نیاز به مدیریت خطا هست ، آیا میشه همه دستورات رو در یک بلوک try-catch نوشت یا باید برای مدیریت هر دستور یک بلوک ایجاد کرد ؟؟

اگه امکان داره در بلوک catch راهی هست که بفهمیم کدوم دستور مورد خطا واقع شده یا نه ؟

اگه برای هر خطای ایجاد شده ، فقط بخوام یک دستور انجام بشه و دستور به وجود آورنده خطا مهم نباشه ، آیا کار درستی هست این کار یا نه ؟!؟!؟!

ممنون

BeyondMicrosoft
جمعه 23 شهریور 1386, 11:40 صبح
با سلام
شما می توانید از چند بلاک catch برای پیگیری خطاهای مختلف استفاده نمایید. مثلا در کد زیر اگر مقدار خوانده شده ار دو TextBox به نامهای NumeratorTextBox و DenominatorTextBox به خطا برخورد کرد(عدد نبود) Exeption یی به نام FormatException رخ میدهد که داخل بلاک مربوطه میشود حال اگر اطلاعت درست وارد شده بود ولی در DenominatorTextBox.Text مقدار 0 قرار گرفته بود Exeption یی به نام DivideByZeroException رخ می دهد


try
{
// Convert.ToInt32 generates FormatException
// if argument is not an integer
int numerator = Convert.ToInt32( NumeratorTextBox.Text );
int denominator = Convert.ToInt32( DenominatorTextBox.Text );

// division generates DivideByZeroException
// if denominator is 0
int result = numerator / denominator;

// display result in OutputLabel
OutputLabel.Text = result.ToString();
} // end try
catch ( FormatException )
{
MessageBox.Show( "You must enter two integers.",
"Invalid Number Format", MessageBoxButtons.OK,
MessageBoxIcon.Error );
} // end catch
catch ( DivideByZeroException divideByZeroExceptionParameter )
{
MessageBox.Show( divideByZeroExceptionParameter.Message,
"Attempted to Divide by Zero", MessageBoxButtons.OK,
MessageBoxIcon.Error );
} // end catch

bpzone
جمعه 23 شهریور 1386, 15:11 عصر
این Exception های که شما در catch تعریف کردید ، رو از کجا میتونم به دست بیارم ؟
آیا از امکانات خود زبان هست یا باید خودم تعریف کنم ؟

اگه جزء امکانات خود زبان هست ، لیست اینها رو از کجا میتونم ببینم ؟

BeyondMicrosoft
جمعه 23 شهریور 1386, 16:07 عصر
با سلام
درواقع Exception(استثنا) ها کلاسهایی هستند که استثناها را تشریح میکنند. یکسری Exception هست که خود توابع .Net از آنها استفاده می کنند ولی اگر خودتان نیاز به تولید یک استثنا جدید باشید نیز می توانید برای اینکه متوجه شوید چه تابعی چه استثنایی به وجود می آورد کافیست به InfoTip اون تابع توجه کنید به شکل زیر توجه نمایید :

http://beyondmicrosoft.persiangig.com/Barnamenevis/Exceptions.PNG

همچنین اگر بخواهید Exception جدیدی ایجاد نمایید می توانید کلاسی ایجاد کنید که از کلاس Exception ارث ببرد برای راحتی کار کافیست بنویسید exception و کلید Tab را فشار دهید، میبینبد که یک کلاس که از Exception نیز به ارث رفته ایجاد میشود. به کد زیر توجه نمایید :



[global::System.Serializable]
public class MyException : Exception
{
//
// For guidelines regarding the creation of new exception types, see
// http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpgenref/html/cpconerrorraisinghandlingguidelines.asp
// and
// http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dncscol/html/csharp07192001.asp
//

public MyException() { }
public MyException(string message) : base(message) { }
public MyException(string message, Exception inner) : base(message, inner) { }
protected MyException(
System.Runtime.Serialization.SerializationInfo info,
System.Runtime.Serialization.StreamingContext context)
: base(info, context) { }
}


سپس برای ایجاد استثنای مورد نظر از کد زیر استفاده می نماییم :


throw new MyException("Message");