2017-01-15 10 views
1

В this question мы решили проблему, но я еще не научился этому вопросу.Определение типа объекта

Ниже комментариев в посте выше:

Моя цель - Для того, чтобы позвонить каждый файл данных на основе индексации из вложенного массива и удалить последние три строки. So- $array = New-Object Sytem.Collections.Arraylist; Get-ChildItem C:\...\test | ForEach-Object { $array += ,@(Get-Content $_.FullName) }; $array[0].removerange($array[0].count-2,2) Но это порождает ошибку, что removerange не распознается. Я проверил - $array[0] | gm и метода removerange действительно не было. Просто снимите и удалите. Как это сделать? - iamsmith41 11 января в 22:14

@ iamsmith41 Get-Content возвращает System.Array, не System.Collections.ArrayList. Первый не имеет метода RemoveRange(). Кроме того, пожалуйста, не перемещайте цель. Если один из ответов разрешает проблему, описанную в вашем текущем вопросе: пожалуйста, подумайте о принятии этого ответа. Если у вас есть новый или последующий вопрос: пожалуйста, напишите новый вопрос. - Ansgar Wiechers 11 января в 23:33

Ok. Я отметил ответ. Но просто дайте мне знать, как это сделать (метод removerange()). Заранее спасибо. - iamsmith41 2 дня назад

$array += ,[Collections.ArrayList]@(Get-Content $_.FullName) должно быть достаточно. Если вам нужна дополнительная помощь, отправьте новый вопрос. - Ansgar Wiechers 2 дня назад


Как узнать тип объекта, как и выше, что я должен использовать это Collections.ArrayList и так далее? Как узнать, что это System.Array, а не System.Collections.ArrayList и т. Д.?

+1

'($ expression) .GetType(). FullName' или' [Type] :: GetTypeArray ((, (выражение $))) [0] .FullName'. – PetSerAl

ответ

0

для вид типа вы можете сделать:

выражение | получить член-

, но если вы можете удалить последние 3 строки в файл, вы можете сделать это:

$yourfile='c:\temp\histo3.txt' 
$content=Get-Content $yourfile 
$content[0..[Math]::abs($content.Count - 4)] | Set-Content $yourfile 
4

Вы можете определить тип объекта с помощью его GetType() метода:

PS C:\>(Get-Item '.').GetType() 

IsPublic IsSerial Name       BaseType 
-------- -------- ----       -------- 
True  True  DirectoryInfo     System.IO.FileSystemInfo 

PS C:\>(Get-Item '.').GetType().FullName 
System.IO.DirectoryInfo

или с помощью Get-Member командлет:

PS C:\>Get-Item '.' | Get-Member 

    TypeName: System.IO.DirectoryInfo 

Name    MemberType  Definition 
----    ----------  ---------- 
Mode    CodeProperty System.String Mode{get=Mode;} 
Create    Method   void Create(), void Create(System.Securi... 
CreateObjRef  Method   System.Runtime.Remoting.ObjRef CreateObj... 
CreateSubdirectory Method   System.IO.DirectoryInfo CreateSubdirecto... 
...

бывший обеспечивает мета информирует (например, его название, базовый тип, который собирает его из и т. д.) (выведите вывод GetType() в Format-List *, чтобы получить полный список).

Последний предназначен в основном для получения информации о членах (свойствах и методах) объекта (или статических членов класса, если вы используете параметр -Static). Обратите внимание: если вам нужна информация о членах объекта коллекции, вы должны использовать Get-Member -InputObject $col вместо $col | Get-Member, потому что использование конвейера будет разворачивать коллекцию, и вы получите элементы элементов коллекции, а не элементы самого объекта коллекции.

Как только вы знаете класс, вы обычно смотрите дополнительную информацию в documentation, например. путем подачи класса или имени участника в вашу предпочтительную поисковую систему.

Смежные вопросы