Saya punya enum
string name;
public enum Color
{
Red,
Green,
Yellow
}
Cara mengaturnya menjadi NULL saat memuat.
name = "";
Color color = null; //error
Diedit: Buruk saya, saya tidak menjelaskannya dengan benar. Tetapi semua jawaban yang terkait dengan nullable sempurna. Situasi saya adalah Bagaimana jika, saya telah mendapatkan / mengatur enum di kelas dengan elemen lain seperti nama, dll. Pada pemuatan halaman saya menginisialisasi kelas dan mencoba untuk menetapkan nilai default ke nol. Berikut ini skenario (Kode dalam C #):
namespace Testing
{
public enum ValidColors
{
Red,
Green,
Yellow
}
public class EnumTest
{
private string name;
private ValidColors myColor;
public string Name
{
get { return name; }
set { name = value; }
}
public ValidColors MyColor
{
get { return myColor; }
set { myColor = value; }
}
}
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
EnumTest oEnumTest = new EnumTest();
oEnumTest.Name = "";
oEnumTest.MyColor = null; //???
}
}
}
Kemudian menggunakan saran di bawah ini saya mengubah kode di atas untuk membuatnya bekerja dengan metode get dan set. Saya hanya perlu menambahkan "?" di kelas EnumTest selama deklarasi variabel enum pribadi dan dalam metode get / set:
public class EnumTest
{
private string name;
private ValidColors? myColor; //added "?" here in declaration and in get/set method
public string Name
{
get { return name; }
set { name = value; }
}
public ValidColors? MyColor
{
get { return myColor; }
set { myColor = value; }
}
}
Terima kasih atas saran yang bagus.
Jawaban:
Anda bisa menggunakan "?" operator untuk jenis nullable.
Atau gunakan praktik standar untuk enum yang tidak bisa nol dengan memiliki nilai PERTAMA dalam enum (alias 0) menjadi nilai default. Misalnya dalam kasus warna Tidak Ada.
sumber
Jika ini adalah C #, itu tidak akan berfungsi: enums adalah tipe nilai, dan tidak bisa
null
.Opsi normal adalah menambahkan
None
anggota:... atau menggunakan
Nullable
:sumber
Buat variabel Anda nullable. Suka:
atau
sumber
Enum adalah tipe "nilai" dalam C # (berarti enum disimpan sebagai nilai apa pun itu, bukan sebagai referensi ke tempat di memori tempat nilai itu sendiri disimpan). Anda tidak dapat menetapkan tipe nilai ke nol (karena nol hanya digunakan untuk tipe referensi).
Yang sedang berkata bahwa Anda dapat menggunakan kelas built in
Nullable<T>
yang membungkus tipe nilai sedemikian rupa sehingga Anda dapat mengaturnya menjadi nol, periksa apakah ituHasValue
dan dapatkan yang sebenarnyaValue
. (Keduanya adalah metode padaNullable<T>
objek.Ada juga jalan pintas yang bisa Anda gunakan:
Itu sama dengan
Nullable<Color>
;sumber
Saya mengasumsikan c ++ di sini. Jika Anda menggunakan c #, jawabannya mungkin sama, tetapi sintaksinya akan sedikit berbeda. Enum adalah seperangkat nilai int. Ini bukan objek, jadi Anda seharusnya tidak menyetelnya menjadi nol. Mengatur sesuatu ke nol berarti Anda mengarahkan pointer ke objek untuk mengatasi nol. Anda tidak dapat melakukannya dengan int. Apa yang ingin Anda lakukan dengan int adalah menetapkannya ke nilai yang biasanya tidak Anda miliki sehingga Anda dapat menelpon apakah itu nilai yang baik atau tidak. Jadi, atur warna Anda ke -1
Atau, Anda dapat memulai enum Anda pada 1 dan mengaturnya ke nol. Jika Anda mengatur warna ke nol seperti sekarang, Anda akan mengaturnya ke "merah" karena merah adalah nol di enum Anda.
Begitu,
sumber
Karena
enum
nilai default sama dengan 0, jika Anda akan menyebutnyadefault(Color)
akan mencetakNone
.Karena berada di posisi pertama, menetapkan nilai literal 0 ke konstanta lain akan mengubah perilaku itu, juga mengubah urutan kejadian akan mengubah output dari
default(Color)
( https://stackoverflow.com/a/4967673/8611327 )sumber
atau bisa kamu gunakan
contoh di mana menugaskan null tidak akan bekerja
jadi kamu bisa menggunakan:
sumber