2009-10-16 38 views

Trả lời

143
baseKey choice; 
if (Enum.TryParse("HKEY_LOCAL_MACHINE", out choice)) { 
    uint value = (uint)choice; 

    // `value` is what you're looking for 

} else { /* error: the string was not an enum member */ } 

Trước .NET 4.5, bạn phải làm như sau, mà là nhiều dễ bị lỗi và ném một ngoại lệ khi một chuỗi không hợp lệ được thông qua:

(uint)Enum.Parse(typeof(baseKey), "HKEY_LOCAL_MACHINE") 
+1

Tôi luôn tự hỏi tại sao vẫn không có quá tải chung cho Enum.Parse. Nó quá dài. – Falanwe

+2

Bây giờ có phương pháp chung Enum.TryParse (). –

17
var value = (uint) Enum.Parse(typeof(baseKey), "HKEY_LOCAL_MACHINE"); 
15

Với một số xử lý lỗi ...

uint key = 0; 
string s = "HKEY_LOCAL_MACHINE"; 
try 
{ 
    key = (uint)Enum.Parse(typeof(baseKey), s); 
} 
catch(ArgumentException) 
{ 
    //unknown string or s is null 
} 
25

Sử dụng Enum.TryParse bạn không cần phải xử lý ngoại lệ:

baseKey e; 

if (Enum.TryParse(s, out e)) 
{ 
... 
} 
-1

giải pháp thay thế có thể là:

baseKey hKeyLocalMachine = baseKey.HKEY_LOCAL_MACHINE; 
uint value = (uint)hKeyLocalMachine; 

Hoặc chỉ:

đoạn
uint value = (uint)baseKey.HKEY_LOCAL_MACHINE; 
+3

Chính xác như thế nào để chuyển đổi một chuỗi thành giá trị enum? – Falanwe

+0

Enums bao gồm hai thành phần: tên và giá trị. Giả sử tên là "HKEY_LOCAL_MACHINE" và giá trị là "0x80000002". Phương thức Enum.Parse() là vô ích trong trường hợp này bởi vì bạn có thể cast thành viên enum để uint và nhận giá trị - 2147483650. Enum.Parse() tất nhiên cho kết quả tương tự nhưng thay vì hardcoding một chuỗi như một tham số bạn có thể cast trực tiếp biến enum bạn đang làm việc. –

+3

Bạn không chuyển đổi chuỗi '" HKEY_LOCAL_MACHINE "' thành giá trị, như OP đã hỏi, bạn đã chuyển đổi ký hiệu 'HKEY_LOCAL_MACHINE' thành giá trị. Quái vật khác nhau hoang dã. – Falanwe

1
var value = (uint)Enum.Parse(typeof(basekey), "HKEY_LOCAL_MACHINE", true); 

Mã này minh họa lấy một giá trị enum từ một chuỗi. Để chuyển đổi từ một chuỗi, bạn cần sử dụng phương thức tĩnh Enum.Parse(), có 3 tham số. Đầu tiên là loại enum bạn muốn xem xét. Cú pháp là từ khóa typeof() theo sau là tên của lớp enum trong ngoặc. Tham số thứ hai là chuỗi được chuyển đổi và tham số thứ ba là bool cho biết bạn có nên bỏ qua trường hợp khi thực hiện chuyển đổi hay không.

Cuối cùng, lưu ý rằng Enum.Parse() thực sự trả về tham chiếu đối tượng, điều đó có nghĩa là bạn cần chuyển đổi rõ ràng loại này thành loại enum bắt buộc (string, int v.v.).

Cảm ơn bạn.

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