Mengapa saya mendapatkan Kesalahan "Tipe 'string' harus merupakan tipe nilai yang tidak dapat dibatalkan untuk menggunakannya sebagai parameter 'T' dalam tipe umum atau metode 'System.Nullable'"?
using System;
using System.Collections;
using System.Collections.Generic;
using System.Data;
using System.Diagnostics;
using Universe;
namespace Universe
{
public class clsdictionary
{
private string? m_Word = "";
private string? m_Meaning = "";
string? Word {
get { return m_Word; }
set { m_Word = value; }
}
string? Meaning {
get { return m_Meaning; }
set { m_Meaning = value; }
}
}
}
String
sudah nullable.Jawaban:
Gunakan
string
alih-alihstring?
di semua tempat dalam kode Anda.The
Nullable<T>
jenis mensyaratkan bahwa T adalah jenis nilai non-nullable, misalnyaint
atauDateTime
. Jenis referensi sepertistring
sudah bisa nol. Tidak akan ada gunanya membiarkan hal-hal sepertiNullable<string>
itu dilarang.Juga jika Anda menggunakan C # 3.0 atau yang lebih baru, Anda dapat menyederhanakan kode Anda dengan menggunakan properti yang diimplementasikan secara otomatis :
sumber
string
adalah tipe referensi, kelas. Anda hanya dapat menggunakanNullable<T>
atauT?
gula sintaksis C # dengan tipe nilai yang tidak dapat dibatalkan sepertiint
danGuid
.Secara khusus, seperti
string
tipe referensi, ekspresi tipestring
sudah bisa null:sumber
System.String
(dengan huruf kapital S) sudah dapat dibatalkan, Anda tidak perlu menyatakannya demikian.(string? myStr)
salah.sumber
Untuk alasan yang sangat spesifik, ketik
Nullable<int>
letakkan kursor Anda di Nullable dan tekan F12 - Metadata memberikan alasannya (Perhatikan kendala struct):http://msdn.microsoft.com/en-us/library/d5x73970.aspx
sumber
Nullable<Nullable<int>>
itu dilarang meskipunNullable<int>
adalah sebuah struct.Harap dicatat bahwa dalam versi C # yang akan datang yaitu 8, jawabannya tidak benar.
All the reference types are non-nullable by default
dan Anda benar-benar dapat melakukan hal berikut:Namun,
Yang penting di sini adalah menunjukkan maksud kode Anda. Jika "niat" adalah bahwa tipe referensi bisa nol, maka tandai jadi jika menetapkan nilai nol ke non-nullable akan menghasilkan peringatan kompiler.
Info lebih lanjut
sumber