try/catch/finally, throw new berbanding lontar semula
Gunakan try/catch/finally untuk pengendalian ralat yang boleh dijangka; fahami throw new berbanding lontar semula; kekalkan contoh kecil dan berfokus.
try/catch/finally, throw new berbanding lontar semula ialah pelajaran Akademi C# percuma di CoddyKit. Ini ialah pelajaran 1 daripada 3. Anda boleh membaca keseluruhan pelajaran di bawah secara percuma — kemudian berlatih secara praktikal dalam pelayar menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran Akademi C#, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus Akademi C# merangkumi sejumlah 3 pelajaran.
Gambaran keseluruhan pengecualian
Matlamat: Kendalikan dan sebarkan ralat dengan selamat.
- try/catch: kendalikan pengecualian khusus
- finally: sentiasa dijalankan untuk pembersihan
- throw new berbanding lontar semula
- Pastikan pengendali pendek; jangan sembunyikan pepijat
Tangkapan khusus
Tangkap pengecualian yang paling khusus yang anda jangkakan; pastikan pengendali pendek dan jelas.
using System;
public class Program
{
public static void Main(string[] args)
{
Console.WriteLine("Start");
try
{
int x = 10;
int y = 0; // will cause DivideByZeroException
Console.WriteLine(x / y);
}
catch (DivideByZeroException ex)
{
Console.WriteLine("Cannot divide by zero: " + ex.GetType().Name);
}
Console.WriteLine("Continue");
}
}
Susunan tangkapan
Susunan penting: letakkan tangkapan khusus dahulu dan tangkapan Exception umum terakhir sebagai langkah keselamatan.
using System;
public class Program
{
static int ParseAndDivide(string text, int divisor)
{
// Throws FormatException or DivideByZeroException
int value = int.Parse(text);
return value / divisor;
}
public static void Main(string[] args)
{
try
{
Console.WriteLine(ParseAndDivide("not-a-number", 2));
}
catch (FormatException)
{
Console.WriteLine("Bad number format");
}
catch (Exception ex)
{
// Fallback last
Console.WriteLine("Other error: " + ex.GetType().Name);
}
}
}
finally untuk pembersihan
Letakkan pembersihan dalam finally. Ia berjalan sama ada pengecualian berlaku atau tidak.
using System;
public class Program
{
static bool opened = false;
static void UseFakeResource()
{
try
{
opened = true;
Console.WriteLine("Open");
throw new InvalidOperationException("boom");
}
catch (InvalidOperationException)
{
Console.WriteLine("Handled");
}
finally
{
opened = false; // cleanup path
Console.WriteLine("Close");
}
}
public static void Main(string[] args)
{
UseFakeResource();
Console.WriteLine("Opened? " + opened);
}
}
Lontar semula dengan betul
Gunakan throw; untuk melontar semula dan mengekalkan tindanan asal. throw ex; menetapkan semula tindanan itu. Balut dengan pengecualian baharu hanya apabila menambah konteks.
using System;
public class Program
{
static void BadRethrow()
{
try
{
Fail();
}
catch (Exception ex)
{
// Resets stack trace:
throw ex; // BAD rethrow
}
}
static void GoodRethrow()
{
try
{
Fail();
}
catch
{
// Preserves original stack trace:
throw; // GOOD rethrow
}
}
static void Fail()
{
throw new InvalidOperationException("fail");
}
public static void Main(string[] args)
{
try { BadRethrow(); }
catch (Exception ex)
{
Console.WriteLine("Bad: " + (ex.StackTrace == null ? "no stack" : "stack reset likely"));
}
try { GoodRethrow(); }
catch (Exception ex)
{
Console.WriteLine("Good: preserves original stack");
}
}
}
Garis panduan pengendalian
Garis panduan:
- Tangkap pengecualian apabila anda boleh mengendalikannya atau menambah konteks.
- Jika tidak, biarkan pengecualian itu naik ke atas.
- Pastikan pengendali kecil; elakkan menelan pengecualian secara senyap.
- Gunakan finally untuk pembersihan; pelupusan sumber akan dibincangkan dalam pelajaran seterusnya.
Peraturan lontar semula
Ringkasan
Ringkasan: Gunakan try/catch untuk ralat khusus, finally untuk pembersihan dan utamakan throw; semasa melontar semula bagi mengekalkan tindanan asal.
Pelajari C# dengan tutor kecerdasan buatan — percuma
Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.
- Kursus
- 93
- Pelajaran
- 346
Soalan Lazim
Adakah pelajaran “try/catch/finally, throw new berbanding lontar semula” percuma?
Ya — teks penuh “try/catch/finally, throw new berbanding lontar semula” boleh dibaca secara percuma di web ini. Untuk berlatih secara interaktif menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7, serta membuka kunci baki kursus Akademi C#, tingkat taraf kepada CoddyKit PRO. Kursus Akademi C# merangkumi sejumlah 3 pelajaran.
Apakah yang akan saya pelajari dalam “try/catch/finally, throw new berbanding lontar semula”?
Gunakan try/catch/finally untuk pengendalian ralat yang boleh dijangka; fahami throw new berbanding lontar semula; kekalkan contoh kecil dan berfokus. Anda berlatih Akademi C# menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.
Adakah saya memerlukan pengalaman untuk memulakan Akademi C#?
Tiada pengalaman terdahulu diperlukan. Pembelajaran Akademi C# di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 1 daripada 3.
Berapa lamakah pelajaran “try/catch/finally, throw new berbanding lontar semula” diambil?
Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.
Bolehkah saya menulis dan menjalankan kod dalam pelajaran Akademi C# ini?
Ya. Setiap pelajaran Akademi C# menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.
Semua pelajaran dalam kursus ini
- try/catch/finally, throw new berbanding lontar semula
- Pengecualian tersuai; reka bentuk ralat
- IDisposable, pernyataan using