如何强制数组类型?

时间:2015-06-26 17:55:15

标签: powershell

当我在只有一个文件的目录中运行Get-ChildItem时,我得到一个DirectoryInfo对象:

PS H:\> (ls).GetType().Name
DirectoryInfo  

一旦我添加第二个文件,输出就变成一个数组:

PS H:\> (ls).GetType().Name
Object[]

我应该如何在函数中处理这种二分法?理想情况下,即使只有一个元素,我也想强制它返回Array,最好不必根据GetType()Length的结果放入条件逻辑。

2 个答案:

答案 0 :(得分:7)

使用数组运算符@()$Array=@(ls)。即使管道返回零或一个对象,该运算符也保证您将拥有一个数组。

答案 1 :(得分:0)

扩展PetSerAl的答案,你也可以更明确地转换你需要的类型:

  • [array](ls)会为您提供一个包含单个成员的System.Array对象,因此您可以在想要避免创建新变量但需要特定类型的地方使用此对象
  • 您还可以通过强制转换指定仅包含特定类型的数组:[int[]]$integersOnly = 1,2,3将为您提供一个System.Array对象,该对象只能包含[int]类型的对象
  • 请记住,您可以使用.Net类 - 如果您想要一个可以轻松修改的数组,该怎么办? [System.Collections.ArrayList](ls)这样做,享受使用Remove()方法

其他一些提示,而我在谈论它:

  • 想知道您可以使用特定类型的对象做什么?将它传递给Get-Member,这是我能想到的最有用的命令;它会向您展示您可以使用该对象执行的所有操作
  • 对一个类及其可以做什么感兴趣,或者寻找可用的不同构造函数等细节?只需输入[<class_name_here>]即可加载程序集,它会显示您想要知道的所有内容