相关疑难解决方法(0)

PowerShell从数组中删除项[0]

我正在努力去除数组的第一行(项ID).

$test.GetType()

IsPublic IsSerial Name                                     BaseType                                                                                                      
-------- -------- ----                                     --------                                                                                                      
True     True     Object[]                                 System.Array
Run Code Online (Sandbox Code Playgroud)

列出我尝试的所有选项,$test | gm,它清楚地说明:

Remove         Method                void IList.Remove(System.Object value)                                                                                              
RemoveAt       Method                void IList.RemoveAt(int index)
Run Code Online (Sandbox Code Playgroud)

所以,当我尝试时,$test.RemoveAt(0)我得到错误:

Exception calling "RemoveAt" with "1" argument(s): "Collection was of a fixed size."At line:1 char:1
+ $test.RemoveAt(1)
+ ~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
    + FullyQualifiedErrorId : NotSupportedException
Run Code Online (Sandbox Code Playgroud)

所以我终于在这里发现我的数组需要System.Object是能够使用的类型$test.RemoveAt(0).最佳做法是将脚本开头的所有数组声明为列表吗?或者$collection = ({$test}.Invoke()),如果需要此功能,最好将数组转换为列表?

这两种类型的优点和缺点是什么?谢谢您的帮助.

arrays powershell arraylist

15
推荐指数
5
解决办法
7万
查看次数

为什么System.Array类实现IList但不提供Add()

这段代码:

int[] myArr = { 1, 2 };
myArr.Add(3);
Run Code Online (Sandbox Code Playgroud)

投掷构建:

错误CS1061:'System.Array'不包含'Add'的定义,并且没有扩展方法'Add'接受类型'System.Array'的第一个参数可以找到(你是否缺少using指令或汇编引用? )

IList接口有Add()方法,但为什么Array没有实现呢?

更新:我从答案中看到它明确地实现了它,好吧,我明白了,谢谢你,我应该更好地坚持这个问题:

为什么Array实际上没有提供 Add(),或者更好,为什么它必须首先实现IList?相反实施的IList,也可能是另一个接口(例如IArray)可能只对数组成员有用的IList-例如IsFixedSize,IsReadOnly,IndexOf()...只是一个想法.

c# list system.array

10
推荐指数
2
解决办法
2130
查看次数

PowerShell中的JSON数组

我正在尝试在PowerShell中生成以下JSON字符串:

[
    {
        "FirstName": "Test",
        "LastName": "Account2"
    }
]
Run Code Online (Sandbox Code Playgroud)

我目前在PowerShell中的代码是:

$Body = @{
    @{
        FirstName='Test'
        LastName='Account2'
     }
}
Run Code Online (Sandbox Code Playgroud)

我得到的错误是:键入哈希文字后,缺少'='运算符。

arrays powershell json hashtable

4
推荐指数
1
解决办法
8775
查看次数

为什么要避免使用递增赋值运算符 (+=) 来创建集合

StackOverflow 站点的问答中+=经常使用递增赋值运算符 ( )[PowerShell]来构造集合对象,例如:

$Collection = @()
1..$Size | ForEach-Object {
    $Collection += [PSCustomObject]@{Index = $_; Name = "Name$_"}
}
Run Code Online (Sandbox Code Playgroud)

然而,它似乎是一种非常低效的操作。

一般情况下,+=在 PowerShell 中构建对象集合时应该避免使用递增赋值运算符 ( ) 是否可以?

collections powershell variable-assignment operator-keyword

4
推荐指数
1
解决办法
529
查看次数