Các mã sau đây không biên dịch:Tại sao null cần một loại diễn viên rõ ràng ở đây?
//int a = ...
int? b = (int?) (a != 0 ? a : null);
Để biên dịch, nó cần phải được thay đổi để
int? b = (a != 0 ? a : (int?) null);
Kể từ khi cả hai b = null
và b = a
là hợp pháp, điều này không có ý nghĩa với tôi .
Tại sao chúng ta phải bỏ null
vào một int?
và tại sao chúng ta không thể đơn giản cung cấp một loại diễn viên rõ ràng cho toàn bộ biểu thức (mà tôi biết là có thể trong các trường hợp khác)?
Tôi chỉ nghĩ trình biên dịch không thích bạn hỏi quá nhiều câu hỏi. Tôi có nghĩa là nhìn, bạn có như 3 người trong số họ trong một dòng! – David
Điều này sẽ trả lời câu hỏi của bạn về lý do: http://stackoverflow.com/questions/2215745/conditional-operator-cannot-cast-implicitly/2215959#2215959. Câu hỏi này không phải là * khá * một bản sao của câu hỏi đó, nhưng lý do vẫn như cũ. –
Lưu ý rằng 'int? b = a! = 0? (int?) a: null; 'cũng hoạt động –