Проверить, является ли переменная списком строк / массивом? - PullRequest
1 голос
/ 06 января 2020

Следующий код возвращает True. Как правильно проверить тип в PowerShell?

$e = @(1,2)
$e -ne $null -and $e.GetType() -eq (@("")).GetType()

Обновление:

Следующий код вернет false. Ожидается, что это будет правдой.

$e = @('1','2')
$e -is [string[]]

1 Ответ

2 голосов
/ 06 января 2020

Вы можете использовать оператор -is, чтобы проверить тип, чтобы проверить, является ли он массивом:

$arr = 1, 2
$arr -is [array]

Однако, вероятно, более разумно проверить, что объект реализует IEnumerable, так как Есть много типов коллекций, которые не являются конкретно массивами, но являются итеративными:

$arr = 1, 2
$arr -is [System.Collections.IEnumerable]

Также обратите внимание, что если вы присваиваете результат командлета / функции переменной, которая может вернуть более одного элемент, но он only возвращает коллекцию с одним элементом, по умолчанию она будет развернута и назначена как одно значение. Вы можете заставить возвращенную коллекцию быть оцененной / назначенной в виде массива одним из следующих методов (используя Get-Process в качестве примера):

$arr = @( Get-Process iexplore ) # ===========> Forces the returned value to be part of a collection,
                                 #              even if only a single process is returned.
$arr -is [System.Collections.IEnumerable] # ==> true

или вы можете использовать нотацию , чтобы принудительно вычислять возвращаемые значения как коллекцию (в этом случае вам потребуется выполнить express вызов вашего командлета / функции):

$arr = , ( Get-Process iexplore )
$arr -is [System.Collections.IEnumerable]

Если вы проверяете generi c collection (коллекция, тип которой определен в пространстве имен System.Collections.Generic), вы также можете проверить сопоставленный тип коллекции, используя вместо этого System.Collections.Generic.IEnumerable[T], где T - тип элемента, разрешенный в массиве. Например:

$list = New-Object System.Collections.Generic.List[string]
$list -is [System.Collections.Generic.IEnumerable[string] # ==> true
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...