Tôi đang viết C# wrapper cho thư viện của bên thứ ba đọc cả giá trị và mảng đơn từ thiết bị phần cứng, nhưng luôn trả về mảng object [] ngay cả đối với một giá trị. Điều này đòi hỏi lặp đi lặp lại các cuộc gọi đến đối tượng [0] khi tôi muốn người dùng cuối có thể sử dụng Generics để nhận một mảng hoặc một giá trị đơn.C# generics khi T có thể là một mảng
Tôi muốn sử dụng Generics để callee có thể sử dụng các wrapper trong các cách sau:
MyWrapper<float> mw = new MyWrapper<float>(...);
float value = mw.Value; //should return float;
MyWrapper<float[]> mw = new MyWrapper<float[]>(...);
float[] values = mw.Value; //should return float[];
Trong MyWrapper Tôi có tài sản giá trị gia tăng hiện như sau:
public T Value
{
get
{
if(_wrappedObject.Values.Length > 1)
return (T)_wrappedObject.Value; //T could be float[]. this doesn't compile.
else
return (T)_wrappedObject.Values[0]; //T could be float. this compiles.
}
}
tôi nhận được một biên dịch lỗi trong trường hợp đầu tiên:
Không thể chuyển đổi loại 'đối tượng []' sang 'T'
Nếu tôi thay đổi MyWrapper.Value để T [] Tôi nhận:
Không thể chuyển đổi loại 'object []' thành 'T []'
Bất kỳ ý tưởng về cách để đạt được mục tiêu của tôi? Cảm ơn!
như thế nào _wrappedObject được xác định? –
_wrappedObject được định nghĩa với MyWrapper được tạo. Phải có tham số arraySize. Đối với các mẫu không mảng, tôi chuyển vào 1 cho giá trị này. – bufferz