Rumah > pembangunan bahagian belakang > C++ > Mengapa Saya Tidak Boleh Menetapkan Kaedah Tanpa Nama kepada `var` dalam C#?

Mengapa Saya Tidak Boleh Menetapkan Kaedah Tanpa Nama kepada `var` dalam C#?

Susan Sarandon
Lepaskan: 2025-01-02 17:10:42
asal
629 orang telah melayarinya

Why Can't I Assign Anonymous Methods to `var` in C#?

Penghadan Penetapan Kaedah Tanpa Nama untuk var

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";
};
Salin selepas log masuk

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";
};
Salin selepas log masuk

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 sebagai jenis perwakilan yang dimaksudkan, ia akan mewujudkan ketidakkonsistenan dengan kes di mana kaedah tanpa nama mempunyai bilangan parameter yang berbeza. Sebagai contoh, kod berikut juga akan dikompilkan kepada rentetan Func perwakilan:

var comparer = delegate(string arg1, string arg2, string arg3, string arg4, string arg5) {
    return false;
};
Salin selepas log masuk

Walau bagaimanapun, ini tidak masuk akal kerana Func perwakilan hanya menyokong sehingga empat hujah dalam .NET 3.5.

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan