class Program
{
static void Main(string[] args)
{
string value = "12345";
Type enumType = typeof(Fruits);
Fruits fruit = Fruits.Apple;
try
{
fruit = (Fruits) Enum.Parse(enumType, value);
}
catch (ArgumentException)
{
Console.WriteLine(String.Format("{0} is no healthy food.", value));
}
Console.WriteLine(String.Format("You should eat at least one {0} per day.", fruit));
Console.ReadKey();
}
public enum Fruits
{
Apple,
Banana,
Orange
}
}
Nếu bạn thực thi mã trên kết quả cho thấy:Tại sao Enum.Parse tạo các mục không xác định?
Bạn nên ăn ít nhất một 12345 mỗi ngày.
Tôi thực sự mong đợi một ArgumentException sẽ bị ném nếu không biết tên (chuỗi) được chuyển. Lấy một cái nhìn cận cảnh định nghĩa Enum.Parse tiết lộ:
Tóm tắt:
Chuyển đổi chuỗi đại diện của tên hoặc giá trị số của một hoặc liệt kê nhiều hằng cho một đối tượng tương đương liệt kê.Exceptions:
ArgumentException: enumType không phải là một Enum. - hoặc - giá trị là một chuỗi rỗng hoặc chỉ chứa khoảng trắng. -hoặc- giá trị là một tên, nhưng không phải là một trong các hằng số được đặt tên được xác định cho điều tra.
I.e. nếu một biểu diễn chuỗi của một số nguyên được truyền, một giá trị enum mới được tạo ra và bây giờ ngoại lệ được ném bởi thiết kế. Điều này có nghĩa không?
Ít nhất bây giờ tôi biết phải gọi Enum.IsDefined(enumType, value)
trước Enum.Parse()
Đây có phải là câu hỏi không? –
Tại sao bạn hỏi và trả lời câu hỏi của riêng bạn? –
Câu hỏi được đặt ra về hành vi ... – Markus