Ngoài sự khác biệt nhàm chán thường xuyên giữa Cast
và As
C# truyền sang loại có thể vô hiệu hóa?
- nếu tôi biết rằng táo là một Fruit vì vậy tôi có thể sử dụng
(Fruit)apple
- và nó ném một ngoại lệ nếu nó không phải là as value
có thể được kiểm tra so với null để xem có thành công [không ném ngoại lệ ...]
Tuy nhiên Ive được đọc @EricLippert article về vấn đề này và đã có một mẫu tốt đẹp về Nullable Value loại:
short? s = (short?)123;
int? i = s as int?;
này sẽ không biên dịch ...
Không thể chuyển đổi loại 'ngắn? ' để 'int?' thông qua chuyển đổi tham chiếu, chuyển đổi quyền anh, chuyển đổi unboxing, chuyển đổi gói hoặc chuyển đổi loại null
Phạt tiền.
vậy tại sao điều này:
short? s = (short?)123;
int? i = (int?)s;
Liệu Compile? (! chống lại mọi kỳ vọng tôi BIẾT rằng s
không phải là int?
- và nó sẽ đi BANG nhưng nó không phải là ...)
Cast kiểm tra ở đây nên được nhiều hơn nữa nguy hiểm hơn so với ví dụ trước đây (mà đi Bàng)
Tôi cảm thấy xấu khi hỏi về chủ đề được nói nhiều.
Cảm ơn trước.
bạn mô tả chính xác những gì Eric Lippert đã viết - dàn diễn viên sẽ biên dịch trong khi toán tử 'as' sẽ không cho các trường hợp liên quan đến các loại nullable. – Yahia
@Yahia nhưng chúng tôi có đồng ý rằng ngắn không phải là INT không? –
ngắn không phải là NHƯNG có thể được đúc/chuyển đổi sang int - và đó là những gì bạn đang nói với trình biên dịch: làm cho ngắn này một int. – Yahia