Điều này có lẽ là không thể, nhưng tôi có lớp này:
public class Metadata<DataType> where DataType : struct
{
private DataType mDataType;
}
Có nhiều hơn thế, nhưng hãy giữ nó đơn giản. Kiểu chung (DataType) được giới hạn ở các loại giá trị bởi câu lệnh where. Những gì tôi muốn làm là có một danh sách các đối tượng Siêu dữ liệu thuộc các loại khác nhau (DataType). Nhu la:
List<Metadata> metadataObjects;
metadataObjects.Add(new Metadata<int>());
metadataObjects.Add(new Metadata<bool>());
metadataObjects.Add(new Metadata<double>());
Điều này thậm chí có thể?
Cả lớp cơ sở trừu tượng và giao diện đều cung cấp một mức độ kiểm soát bằng cách hạn chế loại phần tử có thể được thêm vào danh sách. Tôi cũng không thể thấy quyền anh đi vào đây.
—
0b101010
Tất nhiên, nếu bạn đang sử dụng .NET v4.0 trở lên thì hiệp phương sai là giải pháp.
—
0b101010
List<Metadata<object>>
không lừa
@ 0b101010, Cả hai chỉ hạn chế các loại tham chiếu, mọi loại giá trị tích hợp và mọi cấu trúc vẫn có thể được thêm vào. Ngoài ra, cuối cùng, bạn có một danh sách các
—
Saeb Amini
MetaData
loại tài liệu tham khảo thay vì các loại giá trị ban đầu của bạn không có (thời gian biên dịch) thông tin về kiểu giá trị cơ bản của mỗi yếu tố, đó là một cách hiệu quả "đấm bốc".
List<object>
? Họ sẽ không ngừng đấm bốc / bỏ hộp, họ sẽ không loại bỏ nhu cầu casting, và cuối cùng, bạn đang nhận được mộtMetadata
đối tượng không cho bạn biết bất cứ điều gì về thực tếDataType
, tôi đang tìm kiếm một giải pháp để giải quyết những vấn đề đó. Nếu bạn định khai báo một giao diện / lớp, chỉ vì mục đích có thể đặt loại chung chung thực hiện / dẫn xuất trong một danh sách chung, thì nó khác với việc sử dụng một lớpList<object>
khác ngoài việc có một lớp vô nghĩa như thế nào?