Тодорхой нөхцөлд жишээ нь тоог тэгд хуваах гэх мэт тохиолдолд систем өөрөө онцгой нөхцлийн генерацийг хийдэг. Гэхдээ C# хэл throw оператороор онцгой нөхцлийг гараар үүсгэх боломжийг олгодог. Өөрөөр хэлбэл throw оператороор бид өөрсдөө онцгой нөхцлийг үүсгэн түүнийг програмийн ажиллагааны үед дуудаж болно гэсэн үг.
Жишээ нь хэрэглэгчийн нэрийг аван консолд үзүүлэх
try
{
Console.Write("Нэрээ оруулна уу: ");
string? name = Console.ReadLine();
if (name== null || name.Length < 2)
{
throw new Exception("Нэрийн урт 2 тэмдэгтээс бага байна.");
}
else
{
Console.WriteLine($"Таны нэр: {name}");
}
}
catch (Exception e)
{
Console.WriteLine($"Алдаа: {e.Message}");
}
код байлаа гэе. Хэрвээ нэрийн урт 2 тэмдэгтээс бага байвал онцгой нөхцлийг үүсгэнэ. Үүний тулд throw операторийн дараа онцгой нөхцлийн обьектийг заагаад түүний байгуулагчаар алдааны мэдээллийг дамжуулна. Exception төрлийн оронд бид онцгой нөхцлийн дурын обьектийг ашиглаж болох нь ойлгомжтой. Дараа нь catch блокт бидний үүсгэсэн онцгой нөхцлийн боловсруулалтыг хийнэ.
Ийм байдлаар бид програмийн дурын хэсэгт онцгой нөхцлийг үүсгэх боломжтой. Гэхдээ throw операторийн ард онцгой нөхцлийн обьектийг заалгүй ашиглах өөр хэлбэр бий. throw операторийг ингэж зөвхөн catch блокт хэрэглэж болдог. Жишээ нь
try
{
try
{
Console.Write("Нэрээ оруулна уу: ");
string? name = Console.ReadLine();
if (name == null || name.Length < 2)
{
throw new Exception("Нэрийн урт 2 тэмдэгтээс бага байна.");
}
else
{
Console.WriteLine($"Таны нэр: {name}");
}
}
catch (Exception e)
{
Console.WriteLine($"Алдаа: {e.Message}");
throw;
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
Энэ тохиолдолд 2 тэмдэгтээс бага урттай нэрийг оруулахад үүсэх онцгой нөхцлийг дотоод catch блок боловсруулна. Гэхдээ энэ блокт throw операторийг ашигласан тул онцгой нөхцлийг цааш гадаад catch блокт дамжуулна. Энд өмнөх блокт ирсэн онцгой нөхцөл дамжин ирэх учраас консолд дээрхтэй ижил мэдээллийг үзүүлнэ.