Tôi biết mình đang mạo hiểm bị ăn đòn, nhưng tôi cảm thấy như mình đang đi vòng vòng trong vụ này. Để cung cấp mô hình cho nhiều dự án, chúng tôi đã chuyển mô hình đó sang một dự án riêng (DLL) dưới dạng một loạt giao diện sẽ được triển khai. Chúng tôi có dòng này trên giao diện của chúng tôi:
Danh sách Dòng { get;
Những liên kết đến giao diện này:
giao diện công cộng IImportOrderLineModel
{
chuỗi Số thứ tự { được đặt;
int? Số dòng { được đặt;
chuỗi ItemId { được đặt;
chuỗi CustomerItemId { được đặt;
gấp đôi? Số lượng { được;
số thập phân? Giá { được đặt;
int? QuanlBackOrdered { được đặt;
chuỗi Nhận xét { được đặt;
chuỗi PickLocation { được đặt;
chuỗi OrderFilled { được đặt;
chuỗi HostUom { lấy;
Loại chuỗi {lấy;
}
Vì vậy, trong mã, khi tôi triển khai giao diện và đặt các thuộc tính, tôi có thể đặt chúng mà không gặp vấn đề gì. Tôi đã tạo hai triển khai cụ thể của giao diện và điền chúng cho phù hợp. Bây giờ tôi đang cố gắng làm điều này:
Parallel.ForEach(đơn hàng, đơn hàng =>
{
order.Lines = items.FindAll(x => x.OrderNumber == order.OrderNumber).ToList();
});
Để hợp nhất tất cả các mục vào thuộc tính Lines tương ứng của đơn hàng. Bây giờ mã này hoạt động tốt khi các mô hình được đưa vào mã, nhưng hiện bị hỏng khi chúng tôi chuyển chúng ra dưới dạng giao diện và triển khai chúng theo các phương thức cụ thể. Lỗi là:
Không thể chuyển đổi ngầm loại 'System.Collection.Generic.List' thành 'System.Collections.Generic.List'
Tôi đã đọc về hiệp phương sai, táo không phải là trái cây, câu trả lời đã được đưa ra ở nơi khác, nhưng đây là câu trả lời mới đối với tôi. Tôi cố gắng sử dụng như sau trên giao diện:
giao diện công cộng IImportOrderLineModel trong đó ImportOrderLineModel: lớp, IImportOrderModel
Nhưng làm như vậy sẽ tạo ra lỗi trên các dòng cho các giao diện khác:
Danh sách Dòng { get;
Sử dụng loại chung 'IImportsOrderLineModel' yêu cầu 1 đối số loại
Làm thế nào tôi có thể khắc phục vấn đề này?
Câu trả lời được chấp nhận có vẻ đúng nhưng có nhiều cách tốt hơn để giải quyết vấn đề này. Giải pháp ưa thích là:
IEnumerable dòng =
items.Where(x => x.OrderNumber == order.OrderNumber);
order.Lines =lines.ToList();
Giải pháp này giúp loại bỏ hai vấn đề với giải pháp trong câu trả lời của Renat:
- Bạn bắt đầu bằng một danh sách và kết thúc bằng một danh sách, vì vậy bạn cần tạo ít nhấtmột Danh sách mới. Nhưng
Tìm tất cả
tạo ra một cách không cần thiếtkhácdanh sách. Đó là công việc làm thêm, áp lực thu thêm, v.v., chẳng mang lại lợi ích gì.
Truyền
Thao tác này tương tự như việc tạo một điều tra viên mới, nhưng bạn luôn có thể thực hiện việc này không cần thiết;miễn phíChỉ cần thực hiện chuyển đổi tham chiếu hiệp biến thànhIEnumerable
.
Tôi là một lập trình viên xuất sắc, rất giỏi!