Giải thích lý do tại sao một int nullable không thể được gán giá trị null ví dụC# tại sao không thể một int nullable được gán null như một giá trị
int? accom = (accomStr == "noval" ? null : Convert.ToInt32(accomStr));
Có gì sai với mã mà?
Giải thích lý do tại sao một int nullable không thể được gán giá trị null ví dụC# tại sao không thể một int nullable được gán null như một giá trị
int? accom = (accomStr == "noval" ? null : Convert.ToInt32(accomStr));
Có gì sai với mã mà?
Vấn đề không phải là không thể gán giá trị cho một int ?. Vấn đề là cả hai giá trị được trả về bởi toán tử bậc ba phải cùng loại, hoặc một giá trị phải chuyển đổi hoàn toàn với giá trị khác. Trong trường hợp này, null không thể được chuyển đổi hoàn toàn sang int hay ngược lại, do đó, cần phải có một phôi explict. Hãy thử điều này thay vì:
int? accom = (accomStr == "noval" ? (int?)null : Convert.ToInt32(accomStr));
gì Harry S nói là hoàn toàn đúng, nhưng
int? accom = (accomStr == "noval" ? null : (int?)Convert.ToInt32(accomStr));
cũng sẽ làm các trick. (Chúng tôi Resharper người dùng luôn có thể nhận ra nhau trong đám đông ...)
Bây giờ đó là tốt đẹp, đó chỉ là một sự khác biệt tinh tế nhưng sooo đơn giản! Sẽ +2 nếu tôi có thể (mặc dù nó là một điều nhỏ như vậy) =) – Coops
Một lựa chọn khác là sử dụng
int? accom = (accomStr == "noval" ? Convert.DBNull : Convert.ToInt32(accomStr);
Tôi thích cái này nhất.
Bạn đã thực sự thử điều này? Nó sẽ cung cấp cho các lỗi "Không thể chuyển đổi rõ ràng loại 'đối tượng' để 'int?'. Một chuyển đổi rõ ràng tồn tại (là bạn thiếu một diễn viên?)" –
Tương tự như vậy tôi đã làm trong thời gian dài:
myLongVariable = (!string.IsNullOrEmpty(cbLong.SelectedItem.Value)) ? Convert.ToInt64(cbLong.SelectedItem.Value) : (long?)null;
Thật thú vị - bạn không thực sự cần các diễn viên cho Convert.ToInt32 ... –
Nó vì System.Int32 = System.Nullable –
Tại sao dài! ? làm việc mà không có diễn viên? –