2012-01-04 16 views

Trả lời

15

0 là một int, được ngầm chuyển đổi sang một đối tượng (đóng hộp), và bạn không thể Unbox một int đóng hộp trực tiếp đến một đoạn ngắn. Điều này sẽ làm việc:

short s = (short)(int)(nullObj ?? 0); 

Một đóng hộp T (nơi T là một loại giá trị không nullable, tất nhiên) có thể được mở hộp chỉ để T hoặc T?.

+2

[Đại diện và danh tính] (http://blogs.msdn.com/b/ericlippert/archive/2009/03/19/representation-and-identity.aspx) giải thích lý do tại sao điều này là cần thiết (nghĩa là tại sao điều này là không Không được thực hiện tự động chỉ với 1 lần truyền). – Brian

5

Kết quả của toán tử không hợp nhất trong dòng cuối cùng là một hộp được đóng int. Sau đó, bạn đang cố gắng bỏ hộp đó đến short, không thành công tại thời điểm thực hiện theo cách bạn đã hiển thị.

Nó giống như bạn đã làm điều này:

object x = 0; 
short s = (short) x; 

Sự hiện diện của các nhà điều hành null-coalescing là một chút của một màu đỏ-cá trích ở đây.

+2

+1 để chỉ ra cá trích đỏ. – phoog