2016-07-12 17 views
16

Tôi đang cố gắng để mã trong một Portable Class Library sử dụng ASP.NET Core 1.0, các hướng dẫn sau đây:Type.IsEnum về tài sản trong di Class Library

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

Tuy nhiên, mã này không biên dịch bởi vì trình biên dịch nói rằng tài sản IsEnum là phi có trên Loại.

Mọi đề xuất?

+0

[tài liệu] (https://msdn.microsoft.com/en-us/library/system.type.isenum (v = vs.100) .aspx) nói: "Nếu Kiểu hiện tại thể hiện một tham số kiểu trong định nghĩa của một kiểu generic hoặc phương thức generic, thì thuộc tính này luôn trả về false." [this] (https://social.msdn.microsoft.com/Forums/en-US/7e805189-a7e5-4562-a6e4-ae9feff77da7/what-is-the-equivalent-of-fieldtypeisenum-in-metro?forum= winappswithcsharp) có thể có liên quan, quá – dlatikay

Trả lời

37

Một số chức năng từ Type đã được chuyển đến TypeInfo trong .NET Core.

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

Hi Gabriel, tôi cố gắng sử dụng mã của bạn nhưng hàm GetTypeInfo() không có trong Loại. chuyện gì thế? – Karlok

+3

'GetTypeInfo()' là một phương thức mở rộng từ 'IntrospectionExtensions'. Thêm 'using System.Reflection' vào lớp của bạn. –

+0

Đúng rồi !!! Tôi quên "Sử dụng". Cảm ơn Gabriel !! bây giờ nó hoạt động :-) – Karlok

0

Hãy thử value is Enum chỉ như thế này:

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

Câu trả lời này có vẻ bị bỏ qua. Hiệu suất khôn ngoan hơn, tuy nhiên không phải ai cũng có một ví dụ khi suy luận cần phải xảy ra. (Người hỏi có, vì vậy bạn thực sự thắng) – CyberFox

Các vấn đề liên quan