Dalam C#, kaedah tanpa nama menyediakan cara yang mudah untuk menentukan fungsi sebaris. Walaupun kaedah ini boleh ditugaskan dengan mudah untuk mewakilkan jenis, cubaan untuk menetapkannya kepada pembolehubah yang ditaip secara tersirat (menggunakan var) selalunya membawa kepada ralat pengkompil.
Pertimbangkan contoh kod berikut:
Func<string, bool> comparer = delegate(string value) { return value != "0"; };
Kod ini berjaya menyusun, kerana kaedah tanpa nama diberikan secara eksplisit kepada rentetan Func< bool> mewakilkan. Walau bagaimanapun, kod berikut menimbulkan ralat pengkompil:
var comparer = delegate(string value) { return value != "0"; };
Ralat:
Tidak boleh memberikan kaedah tanpa nama kepada pembolehubah tempatan yang ditaip secara tersirat.
Ralat ini berlaku kerana pengkompil tidak boleh membuat kesimpulan jenis kaedah tanpa nama. Terdapat bilangan tak terhingga kemungkinan jenis perwakilan yang boleh diwakilinya, termasuk Func, Predikat, Tindakan dan lain-lain lagi.
Selain itu, walaupun pengkompil membuat kesimpulan Func
var comparer = delegate(string arg1, string arg2, string arg3, string arg4, string arg5) { return false; };
Walau bagaimanapun, ini tidak masuk akal kerana Func
Untuk menyelesaikan isu ini dan memastikan kaedah tanpa nama dihimpunkan kepada jenis perwakilan yang betul, adalah perlu untuk menyatakan secara eksplisit jenis perwakilan dalam pernyataan tugasan, seperti yang dilihat dalam sampel kod pertama.
Atas ialah kandungan terperinci Mengapa Saya Tidak Boleh Menetapkan Kaedah Tanpa Nama kepada `var` dalam C#?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!