Wie kann ich schnell up-cast object[,] in double[,]?
Ich mit Microsoft.Office.Interop.Excel
bekomme ich kehrte ein 2D-array vom Typ object[,]
enthält double
für Elemente. Beachten Sie, dass die index-Untergrenze ist 1
anstelle der Standard -0
, aber ich kann damit umgehen, dass einfach.
Wie kann schön konvertieren Sie das array in double[,]
mit .NET 3.5. (von schön, ich meine präzise, oder kompakt).
Beachten Sie, dass
double[] values_2 = values.Cast<double>().ToArray();
funktioniert, aber es flacht durch ein array in ein 1D-Struktur.
- Es gibt keinen "schnellen" Weg, es zu tun. Kopieren Sie nun alle Daten in ein neues array, wenn das, was Sie wollen.
- Davor hatte ich Angst. Was
.NET 4.0
? Wird es jemals eine geben sicheren Weise zu tun, Office-Interop? - schnell wie in "ohne cpu" oder schnell wie in "a-one-line-Anweisung"
- Sie können sich wahrscheinlich tun es in einer Linie mit linq, aber es nicht geht, schneller in Bezug auf die Rechenleistung.
- Ich sollte hinzufügen, dass das zwei verschiedene arrays (2D-array von
double
- und 2D-array vonobject
mit 1-basierten Indizes) sind sehr unterschiedliche Objekte. Es gibt keine Möglichkeit, zu wirken zwischen Ihnen.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Array
.Ich würde nicht sagen, dass es ist ein Weg, der schneller ist als der andere, so lange, wie Sie nicht alles tun, dumm. Ich würde sagen, dass, wenn du kannst, wirf Sie, wenn Sie auf Sie zugreifen, anstatt nach vorne. Natürlich hängt dies davon ab, wie Sie beabsichtigen, auf Sie zuzugreifen. Wenn du gehst, um einen index in das array mehr als einmal, dann sind die Kosten von unboxing beginnen könnte, zu bekommen zu viel. Wenn Sie nur das Scannen der Arrays einmal, dann warf Sie gehen.
Diese Arbeit sollte in den meisten Fällen kann aber eine Ausnahme, wenn Sie nicht zuweisen einer Umwandlung delegieren.
Es gibt ein paar Probleme hier.
Erste, da
double
ist nicht ein Typ der Referenz muss es sein, boxed gespeichert werden, in ein object[], so dass der einzige Weg, um auf die Werte zu unbox die Werte in ein double[] (kopieren).Das andere problem ist, dass in C# arrays sind covariant, aber nicht kontravariant, Sie können zuweisen eines Arrays zu einem Verweis auf eine weitere, abgeleitete Art, nicht zu einer weniger-abgeleiteten Typ.
Diesem code wird ein error, wenn eines der Wert in src null ist. Da im obigen code src haben einen festgelegten Wert, es funktioniert gut. Wenn der Wert von src wird dynamisch festgelegt und leider, wenn einer der Wert null ist, wird der obige code nicht funktioniert. Wert wird nicht erfolgreich kopiert werden.