Hej Låter som du är ute efter System.Array.GetValue(). Eftersom alla vektorer och matriser ärver från System.Array så är det bara att casta till det och köra. jo... har testat och kommit fram till att det faktiskt funkar men nu är problemet setValue... den verkar inte gilla när det är multidimensionella arrayer men jag får testa vidare imorgon jo problemet GetValue är avklarat men SetValue kvarstår. >Jag har ett objekt som kan vara en multidimensionell array. Jag kastar den till Array problemet är ju bara att jag inte vet hur många dimensioner det är. Bara att den det skall in i har en dimension mer än den som jag skall stoppa in... Gör ett sista försök... Okej det verkar ju vara krångligare. Det är risk för att du måste göra det manuellt, element för element. Vad händer om du ändå typecastar den till ett object[] och sedan använder GetLower- och GetUpperBound(dimension) för att ta reda på hur många dimensioner object[] kan tänkas ha? Och vad hjälper det? Jag vet hur många dimensioner den har... problemet är att kopiera in den i en ny vector med dimensionerna n+1... och som sagt innan så verkar det inte finnas någon lösning på detta problem... Ok.Du skrev längst upp att du inte visste hur många dimensioner den hade. Men om du vet hur många element den har, går det inte att få en ny array att "peka" på den du erhåller? Grejen var så här att jag vet inte på förhand hur många dimensioner den har och inte heller vilken typ den är. Det enda jag vet är att ett antal vectorer skall sättas ihop till en ny vector av dessa vectorer.Multidimensionell array som object.. [OLöslig]
Har ett litet problem, ska konvertera från Java och där finns en klass (java.lang.reflect.Array) där du kan skicka in en array som object och en int och tillbaka får du objektet (som kan vara en ny array) som finns på den platsen i arrayen.
Jag kan inte typkasta till en object[] eftersom jag inte vet hur många dimensioner arrayen har. Nån som har en bra lösning?
/JohanSv: Multidimensionell array som object..
MSSv: Multidimensionell array som object..
/JohanSv: Multidimensionell array som object..
Problemet är alltså enligt följande:
Jag har ett objekt som kan vara en multidimensionell array. Jag kastar den till Array så att jag kan använda SetValue. Problemet är nu att jag vill sätta t.ex. pos 1 till en annan array dvs det blir flera dimensioner...
Enligt följande: a=new int[2,2]
b=new int[2]
nu vill jag alltså köra typ:
arrayA.SetValue(arrayB,1) men detta klarar han inte av... hur fasiken löser man det?
/JohanSv: Multidimensionell array som object..
>så att jag kan använda SetValue. Problemet är nu att jag vill sätta t.ex. pos 1 till en
>annan array dvs det blir flera dimensioner...
>Enligt följande: a=new int[2,2]
>b=new int[2]
>nu vill jag alltså köra typ:
>arrayA.SetValue(arrayB,1) men detta klarar han inte av... hur fasiken löser man det?
Ja det fungerar naturligtvis inte, eftersom elementtypen i en int[,] är int, inte int[]. Du kanske skulle använda en "jagged array" istället
int[][] a = new int[2][];
int[] b = new int[2];
a.SetValue(b, 1);
MSSv: Multidimensionell array som object..
Saken är att det är en konvertering från Java och jag har typ en method som tar in två arrayer som object och en position
Add(Object arrA, Object arrB, int pos)
så nu vill jag stoppa in arrB i position pos i arrA.
Det enda jag är säker på är att arrA har en dimension mer än arrB...
arrA.SetValue(arrB,pos) hade varit så klockrent men av nån outgrundlig anledning så funkar inte det i .Net
/JohanSv: Multidimensionell array som object..
Har ett par värden i en matrix, t.ex.
{{1,2,3},
{4},
{5,6}
}
Vill alltså ha en GENERELL metod som ger mig:
*Namnet på componentType (t.ex. int i exemplet ovan)
*Datan
Vill stoppa in data i en jagged array enligt följande:
/************* begin code *************/
<code>
int[] dimensions = new int[nrDimensions];//eg. 2
dimensions[0] = firstDimensionSize;//eg 3
for (int i = 1; i < nrDimensions; i++) dimensions[i] = 0;
Object myVector = System.Array.CreateInstance
(componentType, (System.Int32[]) dimensions);//just create
for (int i = 0; i < firstDimensionSize; i++){
vectorComponent=(Object)getComponent(...);//eg. a int[]
with Rank (nr of dimensions)=1
((Array)myVector).SetValue(vectorComponent,i); //CRASH!
if nrDimensions>1
}
</code>
/************* end code *************/
Men detta funkar inte. Även om vectorComponent är korrekt (antal dimensioner). Det ger felmeddelandet:
System.ArgumentException: Array was not a one-dimensional
array.
at System.Array.SetValue(Object value, Int32 index)
Har försökt på ett antal olika sätt att komma runt det här men det verkar som C# förbjuder en att sätta något annat än ett ensamt Object (inte array) på en gång
Nån som har en aning?
/JohanSv: Multidimensionell array som object..
MSSv: Multidimensionell array som object.. [OLöslig]
Använd ex vis GetUpperBound(i) i en for- loop och fånga sedan felet då det inte finns några fler dimensioner (det borde bli fel då).Sv: Multidimensionell array som object.. [OLöslig]
Jag menar jag vill ju inte gå ner och kopiera varje enskilt objekt för sig eftersom det skulle ta för lång tid...
/JohanSv: Multidimensionell array som object.. [OLöslig]
Sv: Multidimensionell array som object.. [OLöslig]
Så här är det: Du kan få en array att peka på en annan vector precis som vilket objekt som helst men du kan inte få den att fatta att det är ytterliggare dimensioner i den arrayen. Och, det är ju så man vill ha det. Tyvärr verkar .Net bry sig för mycket...
/Johan