Usando o .NET Framework ArrayList Class - Como encontrar métodos

3

Como posso encontrar quais métodos e propriedades a classe ArrayList possui?

Eu sou um administrador júnior, me ensinando o Powershell. Eu sei sobre codificação, o que um cão sabe sobre um relógio. No Powershell, posso canalizar uma variável ou um comando para o cmdlet Get-Member , e isso listará todos os métodos e propriedades disponíveis para mim.
No entanto, se eu fizer isso: $a = New-Object System.Collections.ArrayList e $a | gm

Eu recebo o seguinte:
gm : You must specify an object for the Get-Member cmdlet....

Estou passando pela dica Technet Powershell dos guias semanais e eles mostram alguns métodos, como Remove e RemoveRange .
Como posso encontrar todos os métodos associados a uma classe .NET, com o Powershell? Isso está disponível ou preciso procurar em outro lugar? Eu teria que fazer uma pesquisa no Google, toda vez que eu quisesse usar os vários métodos?

Eu acho que estou dizendo, me ensine a pescar. Obrigado.

    
por jen 27.12.2013 / 16:43

3 respostas

2

Isso parece funcionar para o seu caso:

Get-Member -InputObject $a

Referência: link

    
por 27.12.2013 / 18:12
2

Da ajuda do Get-Member:

-- When you pipe a collection of objects to Get-Member, Get-Member gets the members of the individual objects in the collection, such as the properties of each string in an array of strings.

-- When you use InputObject to submit a collection of objects, Get-Member gets the members of the collection, such as the properties of the array in an array of strings.

Assim, você pode usar o seguinte para obter os membros do seu objeto ArrayList:

,$a | gm

Isso funciona porque você está passando Get-Member uma matriz de objetos ArrayList (somente um neste caso). Se você acabou de passar o ArrayList, Get-Member tentará executar nos membros do ArrayList, que está vazio, assim o erro.

Isto é um pouco mais óbvio quando o ArrayList tem alguns membros, como no seguinte:

$a = [System.Collections.ArrayList](1..3)
$a | gm

que retorna

   TypeName: System.Int32

Name        MemberType Definition
----        ---------- ----------
CompareTo   Method     int CompareTo(System.Object value), int CompareTo(int value), int IComparable.CompareTo(Syste...
Equals      Method     bool Equals(System.Object obj), bool Equals(int obj), bool IEquatable[int].Equals(int other)
...
    
por 02.04.2014 / 21:35
1

Algumas coisas:

O PowerShell é bastante impressionante com ares fora da caixa, sem usar a ArrayList explícita.

$myArray = @()
$myArray += "Sam"
$myArray += "Tom"

Ou você pode fazer

$myArray = @("Sam", "Tom", "John")

Para remover um item, podemos fazer algumas coisas divertidas também.

$myArray = $myArray | ? {$_ -ne "Sam"}

Mas, se tudo o que você realmente quer é obter uma lista dos métodos e propriedades, você pode usar a reflexão (classe A .NET) para extrair essa informação, assim:

 [reflection.assembly]::GetAssembly("System.Collections.ArrayList") | Get-Member

Ou apenas os nomes dos métodos e tipos

[reflection.assembly]::GetAssembly("System.Collections.ArrayList") | Get-Member | Select Name, MemberType

Isso vai te ajudar:

Name                 MemberType
----                 ----------
ModuleResolve             Event
CreateInstance           Method
Equals                   Method
GetCustomAttributes      Method
GetCustomAttributesData  Method
GetExportedTypes         Method
GetFile                  Method
GetFiles                 Method
GetHashCode              Method
GetInterface             Method
GetLoadedModules         Method
GetManifestResourceInfo  Method
GetManifestResourceNames Method
GetManifestResourceStreamMethod
GetModule                Method
GetModules               Method
GetName                  Method
GetObjectData            Method
GetReferencedAssemblies  Method
GetSatelliteAssembly     Method
GetType                  Method
GetTypes                 Method
IsDefined                Method
LoadModule               Method
ToString                 Method
CodeBase               Property
EntryPoint             Property
EscapedCodeBase        Property
Evidence               Property
FullName               Property
GlobalAssemblyCache    Property
HostContext            Property
ImageRuntimeVersion    Property
IsDynamic              Property
IsFullyTrusted         Property
Location               Property
ManifestModule         Property
PermissionSet          Property
ReflectionOnly         Property
SecurityRuleSet        Property

Ou como @PatrickS. mencionado, há um comando do PowerShell para pular a chamada da classe Reflection:

"System.Collections.ArrayList" | Get-Member
    
por 27.12.2013 / 18:12