2017-12-31 198 views
8

dizeleri için false değerini döndürür Bir dize için Enum.IsDefined() yöntemini kullandım, ancak False'u True almam gerektiğini düşündüğüm bir durumda kullanıyorum. Aşağıdaki kodu kontrol edin:Enum.IsDefined,

public enum YourEnum : int 
{ 
    Zero = 0, 
    One = 1 
} 

public class Program 
{ 

    public static void Main(string[] args) 
    { 
     Console.WriteLine(Enum.IsDefined(typeof(YourEnum), 1)); 
     Console.WriteLine(Enum.IsDefined(typeof(YourEnum), 1.ToString())); 
    } 
} 

C# Fiddle Demo
Sonucu: Ben ikinci durumda False almalısınız neden bilmiyorum

True 
False 

. Herhangi bir yardım takdir edilir.

+1

Bu, 'string'i kabul eden Enum.Parse()' dır. Enum.IsDefined() '' enum '' da tanımladığınız * sabitler * ile girdiğiniz şeye benzetilir. – haim770

+0

Bu sorunun cevabında, asıl sorum ile ilgili olmayan evet, 'Enum.IsDefined' kabul ediliyor. 'object' ikinci parametre olarak, 'IsDefined' de ikinci parametrenin türünü kontrol etmesini isterim? –

cevap

19

IsDefined() yöntemine bir dize ilettiğinizde, numaralı ada sahip en numaralı numarada bir değer olup olmadığını soruyorsunuz. The documentation okur:
tip EnumType Herhangi üyesi •:

değeri parametre aşağıdakilerden herhangi biri olabilir.
• Değeri, enumType türünde bir numaralandırma üyesi olan bir değişken.
Numaralandırma üyesinin adının dize olarak gösterilmesi. Dizgedeki karakterler, numaralandırma üye adıyla aynı duruma sahip olmalıdır.
• EnumType'ın temeldeki türünün bir değeri.

aynı şeye tüm sonucunda yukarıdaki birinci, ikinci ve dördüncü seçenekler çünkü okumak için biraz kafa karıştırıcı

(vurgu benim)

: enum türünde bir değere geçirilen (kutulu elbette).

Ancak, üçüncü seçenek senaryoda olup bitenleri ve dizenin bir enum üyesinin adıyla eşleşmesi gerekir. "1" dizesini geçiriyorsunuz ve enumdaki geçerli adlar "Zero" ve "One". "1" dizesi, bunlardan hiçbiriyle eşleşmiyor, bu nedenle IsDefined(), false döndürür.

5

Bir dizeyi bağımsız değişken olarak iletirseniz, enum'un adlarından birinin belirtilen dizgeye eşit olup olmadığını görür. Aşağıda her ikisi için de geçerlidir döndürür:

Console.WriteLine(Enum.IsDefined(typeof(YourEnum), 1)); 
Console.WriteLine(Enum.IsDefined(typeof(YourEnum), "Zero")); 

daha source code (line 1503) bakınız. Bunu söyledikten sonra, bu bilginin belgeden çıkarılması daha doğru olacaktır: @Peter Duniho'nun cevabı, uygulama değişebileceğinden beri ortaya çıktı: ama yine de, eğer kaynak kodunun orada olduğunu merak ediyorsanız.