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 0bir 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 Quuxdeğil Foo.
Bir numaradaki öğelerin hiçbiri aşağıdakilere Gkarşılık gelmiyorsa 0:
enum G
{
Foo = 1, Bar = 2, Baz = 3, Quux = 4
}
default(G)0tü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ı.
Foosonra koymak ve 0 değerine sahip olacak ve dönecektir . Çok aptalca ve mantıksız ama bu doğru :(BarFooBarE.Foo == E.Bartrue