2016-07-12 2 views
16

Я пытаюсь кода в Portable Class Library используя ASP.NET Core 1.0, следующие инструкции:Type.IsEnum недвижимость в портативных библиотеках классов

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

Но этот код не компилируется, поскольку компилятор говорит, что свойство IsEnum не является присутствует на типе.

Любые предложения?

+0

[документация] (https://msdn.microsoft.com/en-us/library/system.type.isenum (v = VS.100) .aspx) говорит: «Если текущий тип представляет параметр типа в определении общего типа или общего метода, это свойство всегда возвращает false». [Это] (https://social.msdn.microsoft.com/Forums/en-US/7e805189-a7e5-4562-a6e4-ae9feff77da7/what-is-the-equivalent-of-fieldtypeisenum-in-metro?forum= winappswithcsharp) тоже может быть актуальным – dlatikay

ответ

37

Некоторая функциональность от Type была перенесена в TypeInfo в .NET Core.

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

Привет, Габриэль, я пытаюсь использовать ваш код, но функция GetTypeInfo() отсутствует в Type. что не так? – Karlok

+3

'GetTypeInfo()' - это метод расширения из 'IntrospectionExtensions'. Добавьте 'using System.Reflection' в ваш класс. –

+0

Это правильно !!! Я забыл «Использовать». Спасибо, Габриэль! теперь это работает :-) – Karlok

0

Попробуйте value is Enum так же, как это:

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

Этот ответ кажется упущенным. Производительность лучше, но не у каждого есть пример, когда нужно сделать вывод. (Ответчик, так что вы действительно выиграли) – CyberFox

Смежные вопросы