ตรวจสอบข้อยกเว้นที่สร้างขึ้นโดยคอมไพเลอร์
- 10 นาที
ข้อยกเว้นจะถูกสร้างขึ้นโดยรันไทม์ .NET หรือโดยโค้ดในโปรแกรม ชนิดข้อยกเว้นจะขึ้นอยู่กับรหัสที่ทําให้มีข้อยกเว้น
ข้อยกเว้นที่สร้างโดยคอมไพเลอร์
รันไทม์ .NET จะแสดงข้อยกเว้นเมื่อการดําเนินการพื้นฐานล้มเหลว นี่คือรายการสั้น ๆ ของข้อยกเว้นรันไทม์และเงื่อนไขของข้อผิดพลาด:
-
ArrayTypeMismatchException: โยนเมื่ออาร์เรย์ไม่สามารถจัดเก็บองค์ประกอบที่กําหนดได้ เนื่องจากชนิดจริงขององค์ประกอบไม่เข้ากันกับชนิดที่แท้จริงของอาร์เรย์ -
DivideByZeroException: โยนเมื่อมีความพยายามที่จะหารค่าจํานวนเต็มด้วยศูนย์ -
FormatException: โยนเมื่อรูปแบบของอาร์กิวเมนต์ไม่ถูกต้อง -
IndexOutOfRangeException: โยนเมื่อมีความพยายามที่จะทําดัชนีอาร์เรย์เมื่อดัชนีน้อยกว่าศูนย์หรือนอกขอบเขตของอาร์เรย์ -
InvalidCastException: โยนเมื่อการแปลงอย่างชัดเจนจากชนิดพื้นฐานเป็นอินเทอร์เฟซหรือเป็นชนิดที่ได้รับมาล้มเหลวในขณะทํางาน -
NullReferenceException: โยนเมื่อมีความพยายามที่จะอ้างอิงวัตถุที่มีค่าเป็น Null -
OverflowException: โยนเมื่อการดําเนินการทางคณิตศาสตร์ในบริบทที่ตรวจสอบล้นออกมา
ตัวอย่างโค้ดสําหรับข้อยกเว้นที่สร้างโดยคอมไพเลอร์
ตัวอย่างโค้ดต่อไปนี้แสดงตัวอย่างของโค้ดที่ทําให้มีข้อยกเว้นที่สร้างโดยคอมไพเลอร์
ArrayTypeMismatchException
ข้อยกเว้นของชนิด ArrayTypeMismatchException จะแสดงขึ้นมาเมื่อมีความพยายามที่จะจัดเก็บองค์ประกอบของชนิดที่ไม่ถูกต้องภายในอาร์เรย์ ตัวอย่างต่อไปนี้จะแสดง ArrayTypeMismatchException ข้อยกเว้นเมื่อพยายามจัดเก็บค่าตัวเลขในอาร์เรย์สตริง
string[] names = { "Dog", "Cat", "Fish" };
Object[] objs = (Object[])names;
Object obj = (Object)13;
objs[2] = obj; // ArrayTypeMismatchException occurs
DivideByZeroException
ข้อยกเว้นของชนิด DivideByZeroException เกิดขึ้นเมื่อพยายามหารจํานวนเต็มหรือเลขทศนิยมด้วยศูนย์ ตัวอย่างต่อไปนี้จะแสดง DivideByZeroException ข้อยกเว้นเมื่อดําเนินการหารจํานวนเต็ม
int number1 = 3000;
int number2 = 0;
Console.WriteLine(number1 / number2); // DivideByZeroException occurs
หมายเหตุ
การหารค่าจุดทศนิยมลอยตัวด้วยศูนย์จะไม่แสดงข้อยกเว้น แต่การหารค่าทศนิยมจะเป็นการหารด้วยศูนย์ ซึ่งส่งผลให้มีอินฟินิตี้ด้านบวก ค่าอินฟินิตี้ด้านลบ หรือไม่ใช่ตัวเลข (NaN) ตามกฎทางคณิตศาสตร์ IEEE 754
FormatException
ข้อยกเว้นของชนิด FormatException เกิดขึ้นเมื่อรูปแบบของอาร์กิวเมนต์ไม่ถูกต้อง หรือเมื่อสตริงรูปแบบแบบรวมไม่ได้มีรูปแบบที่ดี ตัวอย่างต่อไปนี้จะแสดง FormatException ข้อยกเว้นเมื่อพยายามแปลงสตริงเป็นจํานวนเต็ม
int valueEntered;
string userValue = "two";
valueEntered = int.Parse(userValue); // FormatException occurs
IndexOutOfRangeException
ข้อยกเว้นของชนิด IndexOutOfRangeException จะแสดงขึ้นมาเมื่อมีความพยายามที่จะเข้าถึงองค์ประกอบของอาร์เรย์หรือคอลเลกชันที่มีดัชนีที่อยู่นอกขอบเขต ตัวอย่างต่อไปนี้จะแสดง IndexOutOfRangeException ข้อยกเว้นเมื่อพยายามกําหนดองค์ประกอบสุดท้ายของ values1 อาร์เรย์ ไปยังองค์ประกอบสุดท้ายของ values2 อาร์เรย์
int[] values1 = { 3, 6, 9, 12, 15, 18, 21 };
int[] values2 = new int[6];
values2[values1.Length - 1] = values1[values1.Length - 1]; // IndexOutOfRangeException occurs
InvalidCastException
ระบบจะแสดงข้อยกเว้นของชนิด InvalidCastException เมื่อพยายามแปลงค่าที่ไม่ถูกต้องหรือการแปลงค่าอย่างชัดเจน ตัวอย่างต่อไปนี้จะแสดงเมื่อ InvalidCastException พยายามแปลงชนิด object สตริงเป็น int ตัวแปร
object obj = "This is a string";
int num = (int)obj;
NullReferenceException
ข้อยกเว้นของชนิด NullReferenceException จะแสดงขึ้นมาเมื่อพยายามเข้าถึงสมาชิกในชนิดที่มีค่าเป็น null มีสองตัวอย่างปรากฏขึ้น ในตัวอย่าง NullReferenceException แรก ถูกโยนเมื่อพยายามเข้าถึงองค์ประกอบของอาร์เรย์ null ตัวอย่างที่สองโยน เมื่อ NullReferenceException พยายามเข้าถึงเมธอด ของสตริง null
int[] values = null;
for (int i = 0; i <= 9; i++)
values[i] = i * 2;
string? lowCaseString = null;
Console.WriteLine(lowCaseString.ToUpper());
OverflowException
ข้อยกเว้นของชนิด OverflowException เกิดขึ้นเมื่อการดําเนินการทางคณิตศาสตร์พยายามกําหนดผลลัพธ์ที่อยู่นอกช่วงของชนิดข้อมูลเป้าหมาย ตัวอย่างต่อไปนี้จะแสดงOverflowExceptionข้อยกเว้นเมื่อพยายามแปลงค่า 400 เป็นdecimalbyteตัวแปร
decimal x = 400;
byte i;
i = (byte)x; // OverflowException occurs
Console.WriteLine(i);
สรุป
นี่คือสิ่งสําคัญบางอย่างที่ต้องจําจากหน่วยนี้:
- รันไทม์ .NET จะแสดงข้อยกเว้นเมื่อการดําเนินการล้มเหลว
- ชนิดข้อยกเว้นจะขึ้นอยู่กับรหัสที่ทําให้มีข้อยกเว้น
- แอปพลิเคชันของคุณควรจับข้อยกเว้นรันไทม์
ตรวจสอบความรู้ของคุณ
คำติชม
หน้านี้มีประโยชน์หรือไม่
ไม่
ต้องการความช่วยเหลือในหัวข้อนี้หรือไม่
ต้องการลองใช้ Ask Learn เพื่อทําให้ชัดเจนหรือแนะนําคุณผ่านหัวข้อนี้หรือไม่