Có ai có thể giải thích cho tôi về hành vi kỳ lạ này không?Tại sao tôi nên bao quanh một cách rõ ràng với "không được chọn"?
int i = 0x1234;
byte b1 = (byte)i;
byte b2 = (byte)0x1234; //error: const value '4660' can't convert to byte (use unchecked)
byte b3 = unchecked((byte)0x1234);
byte b4 = checked((byte)i); //throws
byte b5 = (byte)(int)0x1234; //error: same as above
Chú ý: Đây là một ứng dụng Console rỗng, với NO số học việc kiểm tra được kích hoạt (như mặc định là). Cảm ơn mọi người trước.
CHỈNH SỬA: Tôi phải đủ rõ ràng, nhưng không phải cho tất cả.
Tôi biết rằng một từ không thể vừa với một byte. Tuy nhiên, theo mặc định, một chương trình C# cho phép các hoạt động "nguy hiểm" nhất định, chủ yếu vì lý do hiệu suất.
Tương tự, tôi có thể tổng hợp hai số nguyên lớn với nhau và không có tràn nào cả.
Điều kỳ diệu của tôi là về lỗi biên dịch ở trên: phân đoạn/phép gán b1 được biên dịch, b2 không thể biên dịch được. Rõ ràng là không có sự khác biệt, bởi vì cả hai đều là Int32 có cùng giá trị.
Hy vọng điều đó đã rõ ràng.
Tôi không nói C# và tôi không biết ý nghĩa "đã kiểm tra" và "không được chọn", nhưng tôi biết rằng bạn không thể vừa với số hex bốn chữ số trong một byte. –
Hành vi nào là 'lạ' đối với bạn? Bạn đã cung cấp cho chúng tôi ** các bước để tạo lại ** và ** kết quả thực tế **, nhưng không ** kết quả mong đợi **. – AakashM