Я пишу обертку C# для сторонней библиотеки, которая считывает как одиночные значения, так и массивы с аппаратного устройства, но всегда возвращает массив объекта [] даже для одного значения. Для этого требуется повторный вызов объекта [0], когда я хочу, чтобы конечный пользователь мог использовать генерики для получения массива или одного значения.C# generics, когда T может быть массивом
Я хочу использовать дженерики так вызываемая можно использовать обертку следующими способами:
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[];
В MyWrapper У меня есть свойство Value в настоящее время в следующем:
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'
Если изменить MyWrapper.Value Т [] Я получаю:
Невозможно преобразовать тип 'объект []' на 'T []'
Любые идеи о том, как для достижения моей цели? Благодаря!
Как определяется _wrappedObject? –
_wrappedObject определяется с помощью MyWrapper. Он принимает параметр arraySize. Для шаблонов без массивов я передаю значение 1 для этого значения. – bufferz