【问题标题】:Why List<T> doesn't have ToArray() method in Powershell?为什么 List<T> 在 Powershell 中没有 ToArray() 方法?
【发布时间】:2018-08-16 08:30:15
【问题描述】:

方法 ToArray() 在 .NET Framework 参考中列出,但我无法在 Powershell 中访问它。为什么?有替代品吗?

编辑:

现在我意识到这是因为我尝试使用 += 向列表中添加一个值,就好像它是一个数组一样。我想知道为什么它不起作用(感谢帮助)。

$test=New-Object -TypeName System.Collections.Generic.List[byte]
$test.Add(1)
$test.Add(2)
$test+=3
# NO $test.ToArray() METHOD (BECUASE OF $test+=3)`

【问题讨论】:

  • 也许您可以添加您尝试过的代码示例以及失败原因的简要说明
  • @MathiasR.Jessen - 考虑到 OP 的标题是关于泛型的,我认为问题是指(静态)扩展 Enumerable.ToArray<TSource> 方法,该方法不可用,as you pointed out in the comments here
  • @kuujinbo Extension methods 无法解决,但正如 OP 所暗示的,ToArray() 是作为 List&lt;T&gt; 类型定义本身的一部分实现的
  • "7.7.3 数组连接:当左操作数指定一个数组时,二元 + 运算符创建一个新的无约束一维数组,其中包含左操作数指定的元素,后跟值(s) 由右操作数指定。" - Windows PowerShell 语言规范版本 3.0.docx。因为当您使用+= 时,结果的类型从[List[T]] 更改为[array]
  • 啊,有一个未解决的问题:github.com/PowerShell/PowerShell/issues/5805

标签: powershell


【解决方案1】:

我无法重现您描述的情况。

$foo=[system.collections.generic.list[string]]::new()
$foo.Add("A")
$foo.Add("B")
$foo.Add("C")
[string[]]$bar=$foo.ToArray()
$bar.GetType().FullName

"System.String[]"

【讨论】:

    猜你喜欢
    • 2019-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-18
    • 2011-09-26
    • 2013-06-24
    相关资源
    最近更新 更多