Tôi đã phương pháp sau đây trong một lớp enum helper (Tôi đã đơn giản hóa nó cho mục đích của câu hỏi):Có cách nào tốt hơn để tạo chuỗi chuyển đổi chung thành phương thức enum hoặc mở rộng enum không?
static class EnumHelper
{
public enum EnumType1 : int
{
Unknown = 0,
Yes = 1,
No = 2
}
public enum EnumType2 : int
{
Unknown = 0,
Dog = 1,
Cat = 2,
Bird = 3
}
public enum EnumType3
{
Unknown,
iPhone,
Andriod,
WindowsPhone7,
Palm
}
public static EnumType1 ConvertToEnumType1(string value)
{
return (string.IsNullOrEmpty(value)) ?
EnumType1.Unknown :
(EnumType1)(Enum.Parse(typeof(EnumType1), value, true));
}
public static EnumType2 ConvertToEnumType2(string value)
{
return (string.IsNullOrEmpty(value)) ?
EnumType2.Unknown :
(EnumType2)(Enum.Parse(typeof(EnumType2), value, true));
}
public static EnumType3 ConvertToEnumType3(string value)
{
return (string.IsNullOrEmpty(value)) ?
EnumType3.Unknown :
(EnumType3)(Enum.Parse(typeof(EnumType3), value, true));
}
}
Vậy câu hỏi ở đây là, tôi có thể cắt này xuống một phương pháp mở rộng Enum hoặc có thể một số loại phương pháp duy nhất có thể xử lý bất kỳ loại nào. Tôi đã tìm thấy một số ví dụ để làm như vậy với enums cơ bản nhưng sự khác biệt trong ví dụ của tôi là tất cả các enums có mục Unknown
mà tôi cần trả lại nếu chuỗi là null hoặc trống (nếu không có kết quả được tìm thấy tôi muốn nó thất bại).
Looking for giống như sau có thể:
EnumType1 value = EnumType1.Convert("Yes");
// or
EnumType1 value = EnumHelper.Convert(EnumType1, "Yes");
Một chức năng để làm điều đó tất cả ... làm thế nào để xử lý các yếu tố Unknown
là phần mà tôi đang treo lên trên.
Chỉnh sửa: Điều chỉnh một trong các enums không được xác định bằng số nguyên. Vì vậy, tôi có thể đảm bảo rằng 0 sẽ luôn luôn là trường hợp nhưng Unknown
sẽ luôn luôn là văn bản chính xác ... Tôi đoán tôi có thể sử dụng ví dụ tương tự như T (0) nhưng làm một phân tích cú pháp trên văn bản "Không xác định".
Hạn chế không thể là lớp đặc biệt 'System.Enum' –
@ Maud'Dib: Ugh, bạn nói đúng. Tôi không thấy lỗi trong dự án giả của tôi. Tôi sẽ cập nhật. – chilltemp
@ Kelsey: Quyền của bạn, bạn có thể chỉ đơn giản là reparse 'Không biết' mỗi lần, nhưng đúc từ 0 là hiệu quả hơn giả định rằng nó an toàn cho Enums của bạn. – chilltemp