Ich schreibe einen C# -Wrapper für eine 3rd-Party-Bibliothek, die einzelne Werte und Arrays von einem Hardwaregerät liest, aber immer ein Objekt [] -Array sogar für einen Wert zurückgibt. Dies erfordert wiederholte Aufrufe von Objekt [0], wenn der Endbenutzer in der Lage sein soll, Generika zu verwenden, um entweder ein Array oder einen einzelnen Wert zu erhalten.C# Generics, wenn T ein Array sein könnte
Ich möchte Generika verwenden, damit der Angerufene den Wrapper auf folgende Weise verwenden:
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[];
In MyWrapper ich die Value-Eigenschaft haben zur Zeit wie folgt:
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.
}
}
ich bekommen Fehler im ersten Fall kompilieren:
kann nicht Typ 'Object []' auf 'T' konvertieren
Wenn ich MyWrapper.Value zu T ändern [] Ich:
kann nicht Typ 'Object []' auf 'T []'
Irgendwelche Ideen, wie konvertieren um mein Ziel zu erreichen? Vielen Dank!
Wie wird _wrappedObject definiert? –
_wrappedObject ist mit MyWrapper definiert ist konstruiert. Es benötigt einen ArraySize-Parameter. Für Nicht-Array-Vorlagen gebe ich eine 1 für diesen Wert ein. – bufferz