Mengakses Objek Jenis Tanpa Nama Di Luar Skopnya dalam C#
Mengakses ahli jenis tanpa nama di luar skop yang diisytiharkan boleh menimbulkan cabaran dalam C#, terutamanya apabila cuba memindahkan data antara kaedah. Pertimbangkan kod berikut:
void FuncB() { var obj = FuncA(); Console.WriteLine(obj.Name); } FuncA() { var a = (from e in DB.Entities where e.Id == 1 select new {Id = e.Id, Name = e.Name}).FirstOrDefault(); return a; }
Malangnya, kod ini akan mengakibatkan ralat kerana obj tidak lagi boleh diakses di luar FuncA().
Pendekatan Berhati-hati
Secara umumnya disyorkan untuk mengelak daripada mengakses objek jenis awanama di luar skopnya. Amalan ini boleh membawa kepada kod yang mengelirukan dan kemungkinan ralat. Walau bagaimanapun, jika mengakses objek jenis tanpa nama di luar skopnya amat diperlukan, terdapat penyelesaian yang dikenali sebagai "cast by example."
The Cast by Example Hack
Ini teknik melibatkan penggunaan kaedah CastByExample untuk menghantar objek jenis tanpa nama kepada jenis yang dikehendaki. Berikut ialah contoh:
public void FuncB() { var example = new { Id = 0, Name = string.Empty }; var obj = CastByExample(FuncA(), example); Console.WriteLine(obj.Name); } private object FuncA() { var a = from e in DB.Entities where e.Id == 1 select new { Id = e.Id, Name = e.Name }; return a.FirstOrDefault(); } private T CastByExample<T>(object target, T example) { return (T)target; }
Dengan menyediakan objek contoh, CastByExample() boleh membuat kesimpulan jenis yang betul dan menghantar objek sasaran kepada jenis itu.
Awas
Walaupun teknik pelakon melalui contoh boleh berguna, ia harus digunakan dengan berhati-hati. Amalan ini boleh mengakibatkan ralat penghantaran jika objek sasaran tidak sepadan dengan contoh yang disediakan. Sentiasa dinasihatkan untuk mempertimbangkan pendekatan alternatif untuk mengakses objek jenis tanpa nama di luar skopnya.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengakses Objek Jenis Tanpa Nama di Luar Skopnya dalam C#?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!