2016-07-12 6 views
16

Ich bin in einem Portable Class Library zu Code versucht ASP.NET Core 1.0 verwenden, wird die folgende Anweisung:Type.IsEnum Immobilien in Portable Klassenbibliothek

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

Aber dieser Code nicht kompiliert, da der Compiler sagt, dass die Eigenschaft IsEnum nicht ist vorhanden am Typ.

Irgendwelche Vorschläge?

+0

[Dokumentation] (https://msdn.microsoft.com/en-us/library/system.type.isenum (v = VS.100) .aspx) sagt: "Wenn der aktuelle Typ einen Typparameter in der Definition eines generischen Typs oder einer generischen Methode darstellt, gibt diese Eigenschaft immer false zurück." [this] (https://social.msdn.microsoft.com/Forums/en-US/7e805189-a7e5-4562-a6e4-ae9feff77da7/what-is-the-äquivalent-of-fieldtypeisenum-in-metro?forum= winappswithcsharp) kann auch relevant sein, – dlatikay

Antwort

37

Einige Funktionalität von Type wurde in .NET Core zu TypeInfo verschoben.

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

Hallo Gabriel, ich versuche, Ihren Code zu verwenden, aber die Funktion GetTypeInfo() ist nicht auf Typ vorhanden. Was ist falsch? – Karlok

+3

'GetTypeInfo()' ist eine Erweiterungsmethode von 'IntrospectionExtensions'. Fügen Sie der Klasse 'using System.Reflection' hinzu. –

+0

Es ist richtig !!! Ich habe das "Benutzen" vergessen. Danke Gabriel !! jetzt funktioniert es :-) – Karlok

0

Versuchen value is Enum wie folgt aus:

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

Diese Antwort scheint übersehen. Performance weise besser, aber nicht jeder hat eine Instanz, wenn der Rückschluss stattfinden muss. (Der Fragesteller hat, so dass Sie tatsächlich gewinnen) – CyberFox

Verwandte Themen