Câu hỏi này liên quan đến đúc enums trong phương pháp chungC# Đúc với các đối tượng để enums
Với một enum
public enum Crustaceans
{
Frog = 1,
Toad = 4
}
tôi có thể tạo ra một thể hiện của enum của tôi chỉ đơn giản là đủ
short val = 4;
Crustaceans crusty = (Crustaceans) val;
Tuy nhiên, nếu
short val = 4;
object obj = (object) val;
Crustaceans crusty = (Crustaceans)obj;
một ngoại lệ thời gian chạy được ném cố gắng để thực hiện việc khởi tạo của giòn.
Bất cứ ai có thể giải thích lý do tại sao điều này xảy ra và lý do tại sao việc lập một điều như vậy là không hợp pháp.
Không phải là tôi thực sự muốn làm điều này, nhưng tôi cam qua một vấn đề khi cố gắng để có được một cái gì đó tương tự xảy ra với generics và hiệu quả đó là những gì đang xảy ra dưới bìa. tức là
public T dosomething<T>(short val) where T : new()
{
T result = (T)(object) val;
return result;
}
Vì vậy, những gì tôi đang cố gắng làm là có một chức năng chung mà làm việc với enums và phi enums (không quá quan trọng, nhưng sẽ là tốt đẹp) có thể được thiết lập để một giá trị ngắn mà không ném một ngoại lệ và thực sự khởi tạo giá trị enum chính xác.
Nó sẽ được ra khỏi dòng để chỉ ra rằng Frog và Toad không phải là động vật giáp xác?:) – JTMon
bản sao có thể có của [Tại sao tôi không thể bỏ hộp số dưới dạng số thập phân?] (Http://stackoverflow.com/questions/1085097/why-cant-i-unbox-an-int-as-a-decimal) –
@sweetfa: trong khi câu hỏi tôi chỉ ra giao dịch với int so với thập phân và không enums, nó giải thích hành vi (có liên quan đến boxing và unboxing). Đặc biệt, câu trả lời được chấp nhận đề cập đến một bài viết của Eric Lippert: "[Đại diện và danh tính] (http://blogs.msdn.com/b/ericlippert/archive/2009/03/19/representation-and-identity.aspx) ", điều này giải thích chi tiết này. –