Given the following script:
function f {
    [CmdletBinding()]Param()
    Write-Verbose 'f: Start'
    $t = New-Object 'System.Collections.ArrayList'
    Write-Verbose $t.GetType().Name
    return $t
}
$things = New-Object 'System.Collections.ArrayList'
$things.GetType().Name
$things = f -verbose
$things.GetType().Name
Why wouldn't the $things be-of-type ArrayList at the final line?
Outputting collections (not just arrays) causes PowerShell to enumerate them by default - i.e., the collection's elements are sent one by one to the success output stream.
[object[]]), except if there's only one element, which is captured as-is.To prevent that - i.e., to output a collection as a whole - use:
Write-Output -NoEnumerate $t
A shorter and more efficient, but less obvious alternative is to wrap the collection in an auxiliary single-element array with the unary form of ,, the array-construction operator, which causes PowerShell to enumerate the outer array and output the collection within as-is:
, $t    # implicit output, no Write-Output needed
                        If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With