Gyűjtemény és tömb, mint visszatérési érték

A függvények egy fontos jellemzője, hogy a visszatérési értékük típusa megváltozhat. Nézzünk erre két példát. Az első:

function test(){

    [int[]] $mx =  1,2

    write-host "Belül:" $mx.gettype().FullName   

    $mx

}

 

$mx1 = test

write-host "Kívül:", $mx1.gettype().FullName

A test függvényben létrehoztam egy  egyszerű egészekből álló tömböt, amit visszatérési értékként visszaadok. Mind a függvényen belül, mind kívül kiírom az adat típusát. Ha ezt lefuttatom, akkor a következő eredményeket kapom:

Belül: System.Int32[]

Kívül: System.Object[]

Látható, hogy az eredeti Int32[]-ből Object[]-é alakult a visszatérési érték. Ez talán nem okoz olyan gyakran problémát, de ha többdimenziós tömböket akarunk visszaadni, akkor már jóval rizikósabb a dolog:

function test(){

    $mx = New-Object 'int[,]' 10,20

    write-host "Belül:" $mx.gettype().FullName   

    $mx

}

 

$mx1 = test

write-host "Kívül:", $mx1.gettype().FullName

 Ennek eredménye:

Belül: System.Int32[,]

Kívül: System.Object[]

Azaz a kétdimenziós egész-tömbből egydimenziós objektumtömb lett. Hogyan lehet elérni, hogy ezek a típuskonverziók ne következzenek be? Használjunk egy régről ismert trükköt, a vessző használatát:

function test(){

    $mx = New-Object 'int[,]' 10,20

    write-host "Belül:" $mx.gettype().FullName   

    ,$mx

}

 

$mx1 = test

write-host "Kívül:", $mx1.gettype().FullName

 A test függvény utolsó sorában a ,$mx megoldja a problémát:

Belül: System.Int32[,]

Kívül: System.Int32[,]

Ugyanígy az első példafüggvényt is ez a trükk meggyógyítja.



Word To HTML Converter