Kiểm tra xem một Loại đã cho có phải là Enum không


117

Tôi đang viết JsonConverter cho Json.NET sẽ cho phép tôi chuyển đổi bất kỳ enum nào thành giá trị chuỗi được xác định bởi thuộc tính [Description].

Ví dụ:

public enum MyEnum {
    [Description("Sunday")] Sunday,
    [Description("Monday")] Monday,
    [Description("Tuesday")] Tuesday,
    [Description("Wednesday")] Wednesday,
    [Description("Thursday")] Thursday,
    [Description("Friday")] Friday,
    [Description("Saturday")] Saturday
}

Tôi đã có mã hỗ trợ myEnum.Description()hiển nhiên sẽ trả về mô tả chuỗi của nó.

Trong triển khai JsonConverter, có phương pháp này:

    public override bool CanConvert(Type objectType)
    {

    }

Tôi đang cố gắng tìm ra cách xác định xem objectTypecó phải là một Enumvà trả về true hay không để bộ chuyển đổi biết nó có thể chuyển đổi đối tượng này. Vì tôi có nhiều Enumcái, tôi không thể kiểm tra rõ ràng từng cái nên tôi đã hy vọng có một cách chung chung hơn để hoàn thành việc này.


Khi bạn nói "xác định xem objectType có phải là Enum hay không", về cơ bản bạn muốn kiểm tra xem objectType có phải là "MyEnum" hay không, thay vì bất kỳ enum nào khác. Đúng không?
Pawan Mishra

Không, tôi muốn kiểm tra xem nó có phải là Enum không. Câu trả lời của @ minitech là những gì tôi đang tìm kiếm.
Bryan Migliorisi

Câu trả lời:


234

Sử dụng thuộc IsEnumtính:

if(objectType.IsEnum) {
    return true;
}

62
hoặc chỉreturn objectType.IsEnum
Andrew Whitaker

7
@AndrewWhitaker: Tôi nhận ra rằng vì phương thức này được gọi CanConvertnên nó sẽ kiểm tra nhiều chuyển đổi có thể có khác nhau, không chỉ nếu đó là một enum. Nếu không, bạn cũng có thể chỉ sử dụng IsEnumtài sản đó.
Ry-

5
@BryanMigliorisi: Chúng tôi rất hoan nghênh bạn :) Hãy đảm bảo luôn duyệt qua IntelliSense, tôi đã học được rất nhiều điều từ nó.
Ry-

9
@SergeyMetlov trong PCL bạn có thể sử dụng objectType.GetTypeInfo () IsEnum.
Alexander Müller

làm thế nào bout if (myObject là Enum)
Nick Kovalsky


1

Tôi đã hiểu sai hoàn toàn câu hỏi bằng cách tập trung quá nhiều vào [Mô tả], vì vậy trong trường hợp bạn muốn kiểm tra xem một enum cụ thể có thuộc tính [mô tả] hay không (trong trường hợp json ném phù hợp khi không có), thì đây là một cách có thể để kiểm tra điều đó:

public override bool CanConvert(Type objectType)
{
    FieldInfo[] fieldInfo = objectType.GetFields(BindingFlags.Public | BindingFlags.Static);

    if( fieldInfo.Length > 0 )
    {
        return ( fieldInfo[0].GetCustomAttributes(typeof(DescriptionAttribute),false).Length > 0 );
    }
    else
    {
        return false;
    }
}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.