Khai báo biến chưa được gán trong C# không được gắn cờ với lỗi - cố gán giá trị không hợp lệ cho biến là. Ví dụ: đây là một biến không chắc chắn được gán (giả định là biến địa phương) sau khi khai báo:
uint z;
-1 không phải là giá trị hợp lệ cho một số tiền lớn hơn 0,5, đó là lý do tại sao ví dụ của bạn sẽ không biên dịch.
Bây giờ, phần còn lại: các loại số nguyên chỉ bị tràn khi tràn - giống như việc thêm 1 đến int.MaxValue
trả lại int.MinValue
. Đây là một cải tiến hiệu suất đáng kể so với việc có chương trình kiểm tra từng hoạt động cho tràn - với chi phí có khả năng không phát hiện lỗi.
Chỉ khi bạn đang ở trong một bối cảnh không được kiểm soát, hãy nhớ bạn - nếu bạn thực hiện bất kỳ thao tác nào trong các thao tác này trong ngữ cảnh được chọn, bạn sẽ nhận được một ngoại lệ. Ví dụ;
class Test
{
static void Main()
{
checked
{
uint a = 5;
uint b = 6;
uint c = a - b;
}
}
}
Chạy điều đó và bạn sẽ thấy số OverflowException
bị ném. Nếu đó là những gì bạn muốn cho toàn bộ dự án của mình, bạn có thể đặt nó trong thuộc tính dự án (hoặc biên dịch với tùy chọn dòng lệnh /checked+
để csc
.)
EDIT: Cần lưu ý rằng các câu trả lời khác đã cho thấy rằng bạn có thể đặt số lượng mã nhỏ hơn trong ngữ cảnh đã chọn - chỉ cần khai báo và gán c
hoặc thậm chí chỉ là phép tính. Đó là tất cả khá linh hoạt.
Nguồn
2008-10-26 21:35:18
Tương tự giữ cho ulong – Llyle