Chúng tôi đã tạo cấu trúc để kết hợp các số nguyên và giá trị dài từ DB, do đó chúng có thể được xử lý một cách rõ ràng dưới dạng ID bằng trình chuyển đổi Json (với trình chuyển đổi tùy chỉnh chuyên dụng).Thời gian chạy ẩn ngầm từ đối tượng
Vấn đề là chúng ta đọc dữ liệu này từ một Dictionary<string, object>
mà thực sự là một đối tượng DataRow
-like nơi phần string
là tên của cột và object
phần là giá trị.
Vì vậy trước chúng tôi đã có mã này để đọc các giá trị:
int myVal = (int)row["COLUMN"]
Chúng tôi muốn mã này tiếp tục làm việc cũng sau những thay đổi này.
Nhưng kể từ row["COLUMN"]
là object
(@ biên dịch-thời gian) diễn viên ngầm không thành công, mặc dù nó thực sự là một Id32
(@ thời gian chạy).
Sau đây rõ ràng là hoạt động:
int myVal = (Id32)row["COLUMN"]
Nhưng có một số người cách để sửa chữa này mà không sửa đổi mã mà đọc giá trị?
Đây là mã struct:
public struct Id32
{
public readonly int Value;
public Id32(int id) { this.Value = id; }
public static implicit operator int(Id32 id) { return id.Value; }
public static implicit operator Id32(int id) { return new Id32(id); }
}
Xem thêm: http://stackoverflow.com/questions/1611083/will-the-c-sharp-compiler-perform-multiple-implicit-conversions-to-get-from-one –
Câu hỏi này là về chuyển đổi tiềm ẩn , không phải phôi. Mặc dù việc cast có liên quan (bạn có một 'object' và nó cần được cast thành' int', có thể bên trong một chuyển đổi ngầm từ 'object' được định nghĩa trên' Id32'). – binki