3

Как узнать, какие методы и свойства имеет класс ArrayList?

Я младший системный администратор, обучаю себя Powershell. Я знаю о кодировании, что собака знает о часах.
В Powershell я могу передать переменную или команду командлету Get-Member , и в нем будут перечислены все доступные мне методы и свойства.
Однако, если я сделаю это:
$a = New-Object System.Collections.ArrayList
$a | gm

Я получаю следующее:
gm : You must specify an object for the Get-Member cmdlet....

Я ознакомлюсь с Руководством недели Technet Powershell, в котором приведены несколько методов, таких как Remove и RemoveRange .
Как найти все методы, связанные с классом .NET, с Powershell? Это доступно, или мне нужно искать в другом месте? Должен ли я выполнять поиск в Google каждый раз, когда я хочу использовать различные методы?

Я думаю, я говорю, научи меня ловить рыбу. Спасибо.

3 ответа3

2

Это похоже на работу для вашего случая:

Get-Member -InputObject $a

Ссылка: http://blogs.technet.com/b/heyscriptingguy/archive/2010/11/09/using-powershell-get-member-to-explore-the-net-framework.aspx

2

Из справки Get-Member:

- Когда вы передаете коллекцию объектов в Get-Member, Get-Member получает элементы отдельных объектов в коллекции, такие как свойства каждой строки в массиве строк.

- Когда вы используете InputObject для отправки коллекции объектов, Get-Member получает элементы коллекции, такие как свойства массива, в массив строк.

Таким образом, вы можете использовать следующее для получения членов из вашего объекта ArrayList:

,$a | gm

Это работает, потому что вы передаете Get-Member массив объектов ArrayList (в данном случае только один). Если вы просто передадите ArrayList, Get-Member попытается запустить члены ArrayList, который пуст, и, следовательно, ошибка.

Это немного более очевидно, когда ArrayList имеет несколько членов, как показано ниже:

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

который возвращается

   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)
...
1

Несколько вещей:

PowerShell довольно хорош, он готов к использованию без использования явного ArrayList.

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

Или вы можете сделать

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

Чтобы удалить предмет, мы можем сделать несколько забавных вещей.

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

Но если все, что вам действительно нужно, это получить список методов и свойств, вы можете использовать отражение (класс .NET) для извлечения этой информации, например:

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

Или только названия методов и типов

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

Это даст вам:

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

Или как @PatrickS. упомянуто, есть команда PowerShell, чтобы пропустить вызов класса Reflection:

"System.Collections.ArrayList" | Get-Member

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .