Class 使用带有默认触发器的开关的方法不是所有代码路径 returns 值
Class method using switch with default triggers not all code paths returns value
使用一个非常简单的class和一个方法
Class Bagel{
static [int] SwitchTest([int]$value){
switch ($value){
1 {return $value + 1}
2 {return $value * 2}
default{return 0}
}
}
}
这不会编译,因为它在使用方法 SwitchTest
时出错
Not all code path returns value within method.
我完全明白那是什么意思。我难过的地方是什么路径会导致失败? default
应该捕获任何不匹配的条件吗?如果我把它改成这样,我可以让错误消失:
Class Bagel{
static [int] SwitchTest([int]$value){
switch ($value){
1 {return $value + 1}
2 {return $value * 2}
default{return 0}
}
return -1
}
}
这执行得很好。添加最后一个 return
似乎 对我没用。我不认为这是一个错误。只是好奇是否有人可以让我知道我对此一无所知。在什么情况下我可以将最后一个静态方法获取到 return -1?
This question 用 for
循环讨论同样的问题。我明白为什么那个不起作用。
在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)
使用一个非常简单的class和一个方法
Class Bagel{
static [int] SwitchTest([int]$value){
switch ($value){
1 {return $value + 1}
2 {return $value * 2}
default{return 0}
}
}
}
这不会编译,因为它在使用方法 SwitchTest
Not all code path returns value within method.
我完全明白那是什么意思。我难过的地方是什么路径会导致失败? default
应该捕获任何不匹配的条件吗?如果我把它改成这样,我可以让错误消失:
Class Bagel{
static [int] SwitchTest([int]$value){
switch ($value){
1 {return $value + 1}
2 {return $value * 2}
default{return 0}
}
return -1
}
}
这执行得很好。添加最后一个 return
似乎 对我没用。我不认为这是一个错误。只是好奇是否有人可以让我知道我对此一无所知。在什么情况下我可以将最后一个静态方法获取到 return -1?
This question 用 for
循环讨论同样的问题。我明白为什么那个不起作用。
在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)