ตัวแปร 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)
จะทำให้คุณไม่Quux
Foo
หากไม่มีองค์ประกอบใดใน 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
มันงี่เง่าและตอบโต้ได้ง่าย แต่มันเป็นเรื่องจริง :(