Có. Như mọi khi, đặc tả ngôn ngữ C# là nguồn dứt khoát .
Từ C# 3 spec, phần 7.12 (V3 chứ không phải là 4, như spec v4 đi vào chi tiết năng động mà không thực sự liên quan ở đây):
Kiểu của biểu thức a ?? b
phụ thuộc vào chuyển đổi tiềm ẩn có sẵn giữa các loại toán hạng. Theo thứ tự ưu tiên, loại của một ?? b là A0, A hoặc B, trong đó A là loại a, B là loại b (với điều kiện b có kiểu), và A0 là kiểu cơ bản của A nếu A là một kiểu nullable, hoặc A nếu không . Cụ thể, a ?? b
được xử lý như sau:
- Nếu A không phải là một loại nullable hoặc một loại tài liệu tham khảo, một lỗi thời gian biên dịch xảy ra.
- Nếu A là loại có thể vô hiệu và chuyển đổi ẩn tồn tại từ b đến A0, loại kết quả là A0. Tại thời gian chạy, một lần đầu tiên được đánh giá. Nếu số không phải là null, thì không được để loại A0 và điều này trở thành kết quả. Nếu không, b được đánh giá và được chuyển thành loại A0 và kết quả này sẽ trở thành kết quả là .
- Nếu không, nếu chuyển đổi ẩn tồn tại từ b đến A, loại kết quả là A. Khi chạy, giá trị đầu tiên được đánh giá. Nếu không có giá trị rỗng, a sẽ trở thành kết quả . Nếu không, b được đánh giá và được chuyển thành loại A và kết quả này sẽ trở thành kết quả là .
- Nếu không, nếu b có loại B và chuyển đổi ẩn tồn tại từ A0 đến B, loại kết quả là B. Khi chạy, lần đầu tiên được đánh giá. Nếu a không phải là null, thì không được để loại A0 (trừ khi A và A0 cùng loại) và chuyển thành loại B, và điều này trở thành kết quả. Nếu không, b là được đánh giá và trở thành kết quả.
- Nếu không, a và b không tương thích và xảy ra lỗi biên dịch.
Dấu đầu dòng thứ hai, thứ ba và thứ tư là những dấu có liên quan.
Có một cuộc thảo luận triết học để có được về việc liệu trình biên dịch bạn tình cờ được sử dụng là thực tế nguồn gốc của sự thật ... là sự thật về một ngôn ngữ gì nó có nghĩa làm hoặc những gì hiện tại hiện?
Nguồn
2010-06-23 16:42:56
Để lưu ý chân ... Tôi nghĩ đó là lý do tại sao tất cả chúng ta đều thích Eric Lippert ở xung quanh :) –
@Matthew: Một trong nhiều lý do, vâng. Một khía cạnh thú vị của Eric là anh ta có thể đóng vai trò là hóa thân con người của cả trình biên dịch * và * trình biên dịch ... –