Rumah >pembangunan bahagian belakang >C++ >Mengapa Pembolehubah Ditaip Secara Tersirat ('var') Tidak Boleh Memegang Kaedah Tanpa Nama Tanpa Pengisytiharan Jenis Eksplisit?

Mengapa Pembolehubah Ditaip Secara Tersirat ('var') Tidak Boleh Memegang Kaedah Tanpa Nama Tanpa Pengisytiharan Jenis Eksplisit?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-12-31 19:25:10604semak imbas

Why Can't Implicitly Typed Variables ('var') Hold Anonymous Methods Without Explicit Type Declaration?

Mengapa Kaedah Tanpa Nama Tidak Boleh Ditugaskan kepada Pembolehubah Disimpulkan kepada Jenis Tersirat 'Var'?

Pertimbangkan kod berikut:

Func<string, bool> comparer = delegate(string value) {
    return value != "0";
};

Kod ini berjaya dikompil kerana jenis yang disimpulkan bagi ungkapan lambda ialah Perwakilan fungsi. Walau bagaimanapun, kod berikut tidak menyusun:

var comparer = delegate(string value) {
    return value != "0";
};

Pengkompil tidak boleh membuat kesimpulan jenis perwakilan untuk ungkapan lambda dalam kes ini. Ini kerana terdapat banyak kemungkinan jenis perwakilan yang boleh disimpulkan dan pengkompil tidak mempunyai konteks yang mencukupi untuk menentukan yang mana satu yang dimaksudkan.

Sebagai contoh, ungkapan lambda mungkin daripada jenis Func, Predikat, atau Tindakan. Selain itu, ungkapan lambda mungkin daripada jenis Expression>, yang mewakili pokok ungkapanではなく、委任型です。

Untuk menyelesaikan isu ini, nyatakan jenis perwakilan secara eksplisit lambda ungkapan:

var comparer = (Func<string, bool>)delegate(string value) {
    return value != "0";
};

Dengan perubahan ini, kod akan berjaya disusun dan jenis yang disimpulkan bagi ungkapan lambda ialah Func.

Atas ialah kandungan terperinci Mengapa Pembolehubah Ditaip Secara Tersirat ('var') Tidak Boleh Memegang Kaedah Tanpa Nama Tanpa Pengisytiharan Jenis Eksplisit?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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