Tôi có một chục phương pháp trong dự án của tôi (C# 2.0) trông như thế này:Generics mà không mới()
internal bool ValidateHotelStayEntity(DataRow row)
{
return (new HotelStayEntity(row)).Validate();
}
... nhưng đối với 'thực thể' lớp khác nhau. (Được rồi, không phải là khá tầm thường, tôi đã đơn giản hóa mã ở đây.)
Nó trông giống như một ứng cử viên tốt cho generics và tôi đến với điều này:
internal bool ValidateEntity<T>(DataRow row) where T : EntityBase
{
return (new T(row)).Validate();
}
Và tất nhiên tôi nhận được " Không thể tạo một thể hiện của kiểu parametrer 'T' vì nó không có lỗi ràng buộc mới().
Vấn đề là các lớp 'thực thể' này không có một hàm tạo tham số công khai, cũng không phải là cách thêm dữ liệu 'hàng' vào sau đó. Và như EntityBase là một phần của khuôn khổ công ty tôi không kiểm soát được nó (tức là tôi không thể thay đổi nó).
Có cách nào xung quanh vấn đề này không?
Tôi không có thời gian cho một ví dụ bây giờ, nhưng bạn có thể tạo một phương pháp nhà máy chung có thể được chuyển qua hàng. –
Tại sao bạn đi qua DataRows thay vì các thực thể của bạn? Các thực thể có nên được xác nhận hợp lệ trước khi chúng được coi là DataRows không? –
Chúng không thực sự là DataRows, chúng giống như những lỗi lầm của DataRow mà tôi đã đơn giản hóa cho bài đăng này. Tôi không muốn bị bỏ rơi với việc giải thích khuôn khổ bị áp đặt mà tôi phải giải quyết. –