我正在开发一个辅助项目(不适用于课堂),并尝试使用PowerShell改善自己。我正在解决一个问题,我正在用卡的等级和花色来构建扑克手。
第一个例子很好用
$a='A'
$num=2..9
$jkq='J','K','Q'
此示例不起作用
$rank = 'A'+2..9+'J','K','Q'
我知道我以前曾遇到过这个问题,但不记得这个词是指我做错了什么。我尝试了几种隔离数组内部变量的方法,但是似乎都没有用。
为澄清起见,第一个代码示例构建了一个包含12个元素的数组。第二个示例使用1个元素"A2 3 4 5 6 7 8 9J K Q"
构建一个数组
显然,这看起来像在构建字符串和数组之间的类型错误。但是,即使指定了[array]$rank
,我也无法获得成功构建的数组。
这也不起作用
[array]$rank = @('A'+(2..9)+'J','K','Q')
答案 0 :(得分:3)
由于您正在尝试连接数组 ,因此必须确保您的 first 操作数是 array < / em> (也是):
@Model.Aciklama.Truncate(50)
@('A') + 2..9 + 'J','K','Q'
使用PowerShell的array subexpression operator确保@('A')
是一个数组。
重要:'A'
确保 @(...)
是一个数组,但不一定 construct 一个-如果是的话...
的计算结果已经是是一个数组,松散地说,它是一个单独的。
或者,您可以使用一元形式的...
-PowerShell的array-construction operator(“逗号运算符”)-构造{{ 1}}作为单元素数组:
,
两个解决方案都导致一个数组等于(表示为源代码):
'A'
关于您尝试过的事情:
对于诸如, 'A' + 2..9 + 'J','K','Q'
之类的具有类型特定重载的运算符,通常
确定行为的 LHS 类型。
在您的情况下,(第一个)LHS是一个(单个)字符串,'A', '2', '3', '4', '5', '6', '7', '8', '9', 'J', 'K', 'Q'
,因此+
执行 string 串联。 / p>
也就是说,其余的操作数以它们的 stringified形式附加到字符串'A'
上,在数组的情况下,这意味着用空格分隔该数组元素的列表。
一个简化的示例:
+
也就是说,将数组'A'
的字符串化(与PS> 'A' + ('B', 'C')
AB C
等效)附加到字符串'B', 'C'
。