2012-10-03 10 views
5

Mam następujący kod, który próbuję debugowaniaRodzaj członkowie obiekt odlew tablicy w C# powoduje wyjątek

int ll(ref float[,] _lv) { 
    object[] results = new object[20]; 

    results = func_v1(11, _lv); 

} 

Łamanie oglądać pokazy zmienna „Wyniki” coś jak poniżej

results {object[11]} 
+ [0] {float[1,1]} 
+ [1] {double[1,1]} 
+ [2] {float[48,1]} 
    ... 
    ... 
+ [10] {float[1,1]} 

i Nie mogę wpisać rzutowania, aby uzyskać od niego wartości:Zgłasza wyjątek dotyczący nieprawidłowego rzutu.

Proszę mi pomóc zrozumieć, czym dokładnie jest ta tablica obiektów i jak mogę uzyskać z niej wartości.

pozdrowienia. ak

+2

co func_v1? ---- –

+1

dlaczego downvote? pytanie wydaje mi się rozsądne. przegłosowane. – x0n

Odpowiedz

1

float f = (float)results[0]; zgłasza wyjątek dotyczący nieprawidłowego rzutu.

myślę, że trzeba

float[,] f = (float[,])results[0]; 
double[,] d = (double[,])results[1]; 
1

Element o indeksie 0 nie jest float - to float[,].

0

Wyraźnie Object [] wyniki nie mają pływa w nim. Musisz przejść do func_v1 i zobaczyć, co powraca. Najwyraźniej jest to zwracanie czegoś, co spada do obiektu, którym może być cokolwiek. Z wklejanego wyjścia wygląda na to, że zwraca tablicę obiektów z mieszanką dwuwymiarowych elementów pływających i podwójnych.

Można próbować rzutować (unieść [,]) wyniki [0], ale oczywiście to wybuchnie, gdy wykonasz to na przedmiocie, który w rzeczywistości jest podwójnym [,]. Jeśli nie możesz zmienić func_v1(), musisz mieć przełącznik na typie przedmiotu.

tj .: if (wyniki [0] .GetType() == typeof (float [,]))