Rumah > pembangunan bahagian belakang > C++ > Mengapakah Penyelesaian Lebihan Kumpulan Kaedah Gagal dengan Ralat Invocation Ambiguous dalam C#?

Mengapakah Penyelesaian Lebihan Kumpulan Kaedah Gagal dengan Ralat Invocation Ambiguous dalam C#?

Linda Hamilton
Lepaskan: 2025-01-13 08:07:42
asal
357 orang telah melayarinya

Why Does Method Group Overload Resolution Fail with Ambiguous Invocation Errors in C#?

Kaedah C# Kekaburan Penyelesaian Lebihan Muatan Kumpulan

Isunya:

Menggunakan sintaks kumpulan kaedah dengan kaedah perwakilan yang terlebih muatan dalam C# boleh mencetuskan ralat pengkompil "Ambiguous invocation", walaupun kaedah tanpa nama berjaya memanggil lebihan beban yang sama.

Mengapa ia Berlaku:

Pengkompil C# tidak mempunyai peraturan "lebih baik" yang pasti apabila menukar kumpulan kaedah kepada berbilang jenis perwakilan yang serasi semasa resolusi beban lampau. Contohnya, jika classWithSimpleMethods.GetString boleh ditukar kepada kedua-dua Func<string> dan Action, pengkompil tidak boleh memilih antara keduanya, yang membawa kepada kekaburan.

Penyelesaian (Pemutus Jenis Eksplisit):

Penyelesaian adalah untuk menghantar kumpulan kaedah secara eksplisit ke jenis perwakilan yang diingini:

<code class="language-csharp">classWithDelegateMethods.Method((Func<string>)classWithSimpleMethods.GetString);</code>
Salin selepas log masuk

C# 7.3 Penambahbaikan:

C# 7.3 mempertingkatkan resolusi beban lampau untuk kumpulan kaedah. Dalam banyak kes (seperti contoh yang diberikan), classWithDelegateMethods.Method(classWithSimpleMethods.GetString) dan panggilan serupa kini disusun tanpa penghantaran yang jelas. Walau bagaimanapun, kekaburan masih boleh timbul dalam senario yang kompleks.

Atas ialah kandungan terperinci Mengapakah Penyelesaian Lebihan Kumpulan Kaedah Gagal dengan Ralat Invocation Ambiguous 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