Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk Menyelesaikan Ralat Penukaran Jenis Tersirat Apabila Menetapkan kepada Jenis Boleh Null dengan Operator Bersyarat?

Bagaimana untuk Menyelesaikan Ralat Penukaran Jenis Tersirat Apabila Menetapkan kepada Jenis Boleh Null dengan Operator Bersyarat?

Mary-Kate Olsen
Mary-Kate Olsenasal
2025-01-16 16:38:39376semak imbas

How to Resolve Implicit Type Conversion Errors When Assigning to Nullable Types with the Conditional Operator?

Bagaimana untuk menyelesaikan ralat penukaran jenis tersirat apabila menggunakan pengendali bersyarat untuk menetapkan kepada jenis nilai boleh batal?

Apabila berurusan dengan jenis nilai nullable, anda sering menghadapi situasi di mana anda perlu menggunakan operator bersyarat (? :) untuk menetapkan nilai. Walau bagaimanapun, pengkompil mungkin menimbulkan ralat mengenai penukaran jenis tersirat.

Sebagai contoh, pertimbangkan kod berikut:

<code class="language-csharp">EmployeeNumber =
    string.IsNullOrEmpty(employeeNumberTextBox.Text)
    ? null
    : Convert.ToInt32(employeeNumberTextBox.Text);</code>

Di sini, EmployeeNumber ialah atribut Nullable<int> yang disokong oleh lajur pangkalan data yang membenarkan nilai nol. Walaupun kedua-dua nilai null dan integer adalah sah dalam konteks ini, pengkompil masih melaporkan ralat:

Tidak boleh melakukan penukaran tersirat antara 'null' dan 'int'

Masalahnya berpunca daripada fakta bahawa pengendali bersyarat hanya mempertimbangkan nilai benar/salah, bukan penggunaan ungkapan yang terhasil. Oleh kerana null dan integer tidak mempunyai jenis sepunya, pengkompil tidak boleh menentukan jenis tugasan yang sesuai.

Penyelesaian: penukaran eksplisit

Untuk menyelesaikan masalah ini, salah satu nilai mesti dihantar secara eksplisit ke Nullable<int> supaya pengkompil boleh membuat kesimpulan jenis yang betul:

<code class="language-csharp">EmployeeNumber =
    string.IsNullOrEmpty(employeeNumberTextBox.Text)
    ? (int?)null
    : Convert.ToInt32(employeeNumberTextBox.Text);</code>

atau

<code class="language-csharp">EmployeeNumber =
    string.IsNullOrEmpty(employeeNumberTextBox.Text)
    ? null
    : (int?)Convert.ToInt32(employeeNumberTextBox.Text);</code>

Dengan penukaran eksplisit, anda memaksa pengkompil untuk mengenali bahawa hasilnya mestilah integer boleh batal, membolehkan tugasan berjaya.

Nota: Disebabkan keperluan untuk menukar rentetan sebaris kepada integer boleh null, pengendali penggabungan nol (??) tidak menyediakan alternatif yang sesuai dalam senario ini.

Atas ialah kandungan terperinci Bagaimana untuk Menyelesaikan Ralat Penukaran Jenis Tersirat Apabila Menetapkan kepada Jenis Boleh Null dengan Operator Bersyarat?. 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