Loại bar
vẫn là int?
, và không có chuyển đổi ngầm từ int?
để int
.
Điều kiện không thay đổi tính hợp lệ của mã sau này. Điều này cũng đúng đối với các phôi khác:
object x = ...;
if (x is string)
{
string y = x; // This is still invalid
string z = (string) x; // This is fine
}
Trình biên dịch hiếm khi sử dụng kết quả của một đoạn mã để ảnh hưởng đến giá trị của mã khác. Một ví dụ khác:
bool condition = ...;
string x;
if (condition)
{
x = "yes";
}
if (!condition)
{
x = "no";
}
Console.WriteLine(x); // Invalid
Dòng cuối cùng không hợp lệ vì x
vẫn chưa được gán rõ ràng. Chúng tôi biết rằng bất kỳ giá trị nào của x
, chúng tôi sẽ nhập một trong số các đối tượng tuyên bố if
đó ... nhưng trình biên dịch không cố gắng tìm ra điều này.
Mặc dù điều này có vẻ câm, nó làm cho quy tắc ngôn ngữ đơn giản hơn đáng kể.
Nguồn
2013-05-22 13:00:56
Tôi nghĩ rằng câu trả lời này là thư của câu hỏi nhưng không phải là tinh thần. Tinh thần của câu hỏi là, "Tại sao toán tử chuyển đổi của' Nullable' được khai báo 'rõ ràng' hơn là' ngầm định'? " '' 'Edit:' '' Thực ra, nó trả lời tại sao. Lỗi của tôi. – Medinoc