我正在努力去除数组的第一行(项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()),如果需要此功能,最好将数组转换为列表?
这两种类型的优点和缺点是什么?谢谢您的帮助.
这段代码:
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()...只是一个想法.
我正在尝试在PowerShell中生成以下JSON字符串:
[
{
"FirstName": "Test",
"LastName": "Account2"
}
]
Run Code Online (Sandbox Code Playgroud)
我目前在PowerShell中的代码是:
$Body = @{
@{
FirstName='Test'
LastName='Account2'
}
}
Run Code Online (Sandbox Code Playgroud)
我得到的错误是:键入哈希文字后,缺少'='运算符。
StackOverflow 站点的问答中+=经常使用递增赋值运算符 ( )[PowerShell]来构造集合对象,例如:
$Collection = @()
1..$Size | ForEach-Object {
$Collection += [PSCustomObject]@{Index = $_; Name = "Name$_"}
}
Run Code Online (Sandbox Code Playgroud)
然而,它似乎是一种非常低效的操作。
一般情况下,+=在 PowerShell 中构建对象集合时应该避免使用递增赋值运算符 ( ) 是否可以?
powershell ×3
arrays ×2
arraylist ×1
c# ×1
collections ×1
hashtable ×1
json ×1
list ×1
system.array ×1