Bir enum değişkeni, herkes her zaman ilk öğeye varsayılan olup olmadığını biliyor mu?
Bir enum değişkeni, herkes her zaman ilk öğeye varsayılan olup olmadığını biliyor mu?
Yanıtlar:
Sayımın üyesi ne olursa olsun değeri temsil eder 0
. Özellikle, belgelerden :
A'nın varsayılan değeri
enum E
, ifade tarafından üretilen değerdir(E)0
.
Örnek olarak, aşağıdaki numaralandırmayı alın:
enum E
{
Foo, Bar, Baz, Quux
}
Varsayılan değerleri geçersiz kılmadan, yazdırma ilk oluşan öğe olduğundan default(E)
geri döner Foo
.
Ancak, öyle her zaman değil bu durumda 0
bir enum ilk üyesi ile temsil edilir. Örneğin, bunu yaparsanız:
enum F
{
// Give each element a custom value
Foo = 1, Bar = 2, Baz = 3, Quux = 0
}
Baskı default(F)
vermek Quux
değil Foo
.
Bir numaradaki öğelerin hiçbiri aşağıdakilere G
karşılık gelmiyorsa 0
:
enum G
{
Foo = 1, Bar = 2, Baz = 3, Quux = 4
}
default(G)
0
türü olarak kalmasına rağmen G
(yukarıdaki dokümanlar tarafından belirtildiği gibi, belirli numaralandırma türüne bir döküm) döner .
'\0'
ya da 0 koduna karşılık gelen NUL karakteri default(char)
olmadığı için pek olası olmadığı sürece hala 0default(char)
DefaultValue
Özniteliği kullanarak - gibi bir şey - System.ComponentModel.DefaultValue(MyEnum.Blah)
davranışını değiştirmek gerekir default(MyEnum)
ama yine de 0 verir enum
. Varsayılır Varsayılan değeri etrafında bir soyutlama oluşturmak için bir yolu var mı ?
Bir enumdaki değerlerin sırasına güvenmek ve ilkinin her zaman varsayılan olduğunu varsaymak oldukça tehlikeli olduğunu düşünüyorum. Varsayılan değeri korumakla ilgileniyorsanız, bu iyi bir uygulamadır.
enum E
{
Foo = 0, Bar, Baz, Quux
}
Aksi takdirde, gereken tek şey siparişin dikkatsizce yeniden düzenlenmesi ve tamamen farklı bir temerrütünüz olması.
Foo
sonra koymak ve 0 değerine sahip olacak ve dönecektir . Çok aptalca ve mantıksız ama bu doğru :(Bar
Foo
Bar
E.Foo == E.Bar
true