2016-07-12 17 views
16

Ben ASP.NET Core 1.0 kullanarak Portable Class Library kod çalışıyorum, aşağıdaki yönerge içinde Mülkiyet:Type.IsEnum Taşınabilir Sınıf Kitaplığı

public static void WriteMessage<T>(T value) 
{ 
    if (typeof(T).IsEnum) 
    { 
     Debug.Print("Is enum") 
    } 
    else 
    { 
     Debug.Print("Not Is enum") 
    } 
} 

Ama derleyici özelliği IsEnum olmayan olduğu belirtildiği için derleme değil bu kodun Türü üzerinde mevcut.

Herhangi bir öneriniz var mı?

+0

[dokümantasyon] (https://msdn.microsoft.com/en-us/library/system.type.isenum (v = vs.100) .aspx) diyor ki: "Geçerli Tür, genel bir tür veya genel yöntem tanımında bir tür parametresini temsil ediyorsa, bu özellik her zaman false döndürür." [Bu] (https://social.msdn.microsoft.com/Forums/en-US/7e805189-a7e5-4562-a6e4-ae9feff77da7/what-is-the-equivalent-of-fieldtypeisenum-in-metro?forum= winappswithcsharp) de alakalı olabilir, – dlatikay

cevap

37

Type'dan bazı işlevler .NET Core'da TypeInfo'a taşındı.

typeof(T).GetTypeInfo().IsEnum 
+0

Merhaba Gabriel, kodunuzu kullanmaya çalışıyorum ama GetTypeInfo() türünde işlev yok. Yanlış olan ne? – Karlok

+3

'GetTypeInfo()', IntrospectionExtensions' bir uzantı yöntemidir. Sınıfınıza "System.Reflection kullanarak" ekleyin. –

+0

Doğru! "Kullanma" yı unuttum. Teşekkürler Gabriel! şimdi çalışıyor :-) – Karlok

0

aynen böyle value is Enum deneyin:

enum Test {one, two}; 

    public static void Main(string[] args) 
    { 
     //Your code goes here 
     Console.WriteLine("Hello, world!"); 

     Test x = Test.one; 

     WriteMessage<Test>(x); 
    } 

    public static void WriteMessage<T>(T value) 
    { 
     if (value is Enum) 
     { 
      Debug.Print("Is enum"); 
     } 
     else 
     { 
      Debug.Print("Not Is enum"); 
     } 

    } 
+0

Bu cevap gözden kaçmış gibi görünüyor. Performans bilge daha iyi, ancak çıkarımın gerçekleşmesi gereken herkesin bir örneği yoktur. (Asker var, o halde gerçekten kazanırsın) – CyberFox

İlgili konular