ตัวแปร enum ทุกคนรู้ว่ามันเป็นค่าเริ่มต้นองค์ประกอบแรกเสมอ?
ตัวแปร enum ทุกคนรู้ว่ามันเป็นค่าเริ่มต้นองค์ประกอบแรกเสมอ?
คำตอบ:
0มันเป็นสิ่งที่สมาชิกของการแจงนับหมายถึงค่า โดยเฉพาะจากเอกสาร :
ค่าเริ่มต้นของคุ้มค่าที่ผลิตโดยการแสดงออก
enum E(E)0
ตัวอย่างเช่นใช้ enum ต่อไปนี้:
enum E
{
Foo, Bar, Baz, Quux
}
หากไม่มีการแทนที่ค่าเริ่มต้นการพิมพ์default(E)จะส่งคืนFooเนื่องจากเป็นองค์ประกอบแรกที่เกิดขึ้น
อย่างไรก็ตามมันไม่ได้เป็นอย่างนั้นเสมอว่า0สมาชิกคนแรกจะเป็นตัวแทนของ enum ตัวอย่างเช่นถ้าคุณทำสิ่งนี้:
enum F
{
// Give each element a custom value
Foo = 1, Bar = 2, Baz = 3, Quux = 0
}
การพิมพ์default(F)จะทำให้คุณไม่QuuxFoo
หากไม่มีองค์ประกอบใดใน enum ที่Gตรงกับ0:
enum G
{
Foo = 1, Bar = 2, Baz = 3, Quux = 4
}
default(G)ส่งคืนตัวอักษร0ถึงแม้ว่าประเภทของมันจะยังคงเป็นG(ตามที่อ้างโดยเอกสารข้างต้นโยนไปยังประเภท enum ที่กำหนด)
'\0'หรือdefault(char)ซึ่งไม่น่าเป็นไปได้สูงเนื่องจากdefault(char)เป็นอักขระ NUL ที่สอดคล้องกับรหัส char 0
DefaultValueคุณลักษณะ - อย่างเช่น - จะSystem.ComponentModel.DefaultValue(MyEnum.Blah)ปรับเปลี่ยนพฤติกรรมของdefault(MyEnum)แต่มันก็ยังให้ผลเป็น 0 ไม่มีวิธีใดที่จะสร้างสิ่งที่เป็นนามธรรมสำหรับenumค่าเริ่มต้นของมัน
ฉันคิดว่ามันค่อนข้างอันตรายที่ต้องพึ่งพาลำดับของค่าใน enum และคิดว่าสิ่งแรกคือค่าเริ่มต้นเสมอ นี่จะเป็นการปฏิบัติที่ดีหากคุณกังวลเกี่ยวกับการปกป้องค่าเริ่มต้น
enum E
{
Foo = 0, Bar, Baz, Quux
}
ไม่เช่นนั้นสิ่งที่ต้องทำก็คือการสั่งซื้อซ้ำอย่างประมาทและคุณมีค่าเริ่มต้นแตกต่างไปจากเดิมอย่างสิ้นเชิง
Fooหลังจากที่Barทั้งสองFooและBarจะมีค่าเป็น 0 และจะกลับมาE.Foo == E.Bar trueมันงี่เง่าและตอบโต้ได้ง่าย แต่มันเป็นเรื่องจริง :(