使用一个非常简单的类和一个方法
Class Bagel{
static [int] SwitchTest([int]$value){
switch ($value){
1 {return $value + 1}
2 {return $value * 2}
default{return 0}
}
}
}
这不会编译,因为方法SwitchTest
并非所有代码路径都在方法中返回值。
我完全明白这意味着什么。我难倒的地方是什么道路会导致失败? default
应该捕获任何不匹配的条件吗?如果我将其更改为此,我可以使错误消失:
Class Bagel{
static [int] SwitchTest([int]$value){
switch ($value){
1 {return $value + 1}
2 {return $value * 2}
default{return 0}
}
return -1
}
}
执行得很好。添加最后return
似乎对我没用。我不认为这是一个错误。只是好奇是否有人可以让我知道我不知道的事情。在什么条件下我可以得到最后一个静态方法返回-1?
This question讨论for
循环的同一问题。我理解为什么那个不起作用。
答案 0 :(得分:4)
在PowerShell中switch
实际上是一个循环,因此它可以执行零次。这意味着它中的任何条款都不会被执行default
一个。
虽然[int]
不可能有值,但触发switch
零次,但是使用PowerShell断点,您可以挂钩变量读取并将其值替换为完全动态的其他内容:
Class Bagel{
static [int] SwitchTest([int]$value){
switch ($value){
1 {return $value + 1}
2 {return $value * 2}
default{return 0}
}
return -1
}
}
Set-PSBreakpoint -Variable value -Mode Read -Action {
if($value -eq 42) {
$v = Get-Variable value
$v.Attributes.Clear()
$v.Value = @()
}
} | Out-Null
[Bagel]::SwitchTest(42)