Trong chương trình của tôi, tôi đang lặp qua một datatable để lấy dữ liệu từ mỗi trường. Một dòng mã của tôi trông giống như sau:Chuyển đổi trường null thành 0 trước khi chuyển sang int?
int LYSMKWh = Convert.ToInt32(resultsDT.Rows[currentRow]["LYSMKWh"]);
Về cơ bản, tôi chỉ lấy giá trị trong ô và chuyển đổi thành int32. Tuy nhiên, tôi gặp phải vấn đề khi dữ liệu trong trường là một giá trị rỗng. Tôi nhận được thông báo lỗi Truyền không hợp lệ về việc không thể chuyển đổi "DBNull" sang loại khác.
Vì vậy, tôi biết rằng tôi chỉ có thể kiểm tra giá trị của lĩnh vực này trước khi tôi cố gắng để chuyển đổi nó bằng cách làm một cái gì đó như thế này:
if (resultsDT.Rows[currentRow]["LYSMKWh"] == null)
{
resultsDT.Rows[currentRow]["LYSMKWh"] = 0;
}
Nhưng, là có một cách tốt hơn để làm điều này? Có điều gì tôi có thể làm "nội tuyến" trong khi tôi đang cố gắng chuyển đổi giá trị mà không phải sử dụng số if
?
EDIT: Tôi đã thử sử dụng phương pháp gợi ý này:
int LYSMKWh = Convert.ToInt32(resultsDT.Rows[currentRow]["LYSMKWh"] ?? "0");
Thật không may, tôi vẫn nhận được thông báo lỗi Cast hợp lệ liên quan đến các loại DBNull. Nó đã được gợi ý rằng tôi có thể có vấn đề bằng cách sử dụng ?? toán tử nếu các loại ở hai bên khác nhau.
Ngoài ra, vì tôi có toàn quyền kiểm soát dữ liệu mà tôi đang xây dựng dữ liệu, tôi đã thay đổi nó để không có giá trị null nào được ghi vào bất kỳ trường nào. Vì vậy, điều đó phủ nhận rất nhiều sự cần thiết phải chuyển đổi một null thành một int32, trong trường hợp này. Cảm ơn tất cả các lời khuyên của mọi người!
Điều này thực sự làm việc khá tốt cho tôi. Tôi đã thử sử dụng các ví dụ dưới đây với ?? điều hành, nhưng tôi vẫn kết thúc nhận được thông báo lỗi Cast không hợp lệ. Từ những gì người dùng CodeNaked nói dưới đây, vấn đề có thể xảy ra khi sử dụng ?? nếu các loại ở hai bên khác nhau. – Kevin