如何解决如何在类方法中使用 Try-Catch-Finally 块?
尝试在返回字符串的类方法中设置 try-catch-finally
块时收到矛盾的错误消息。
我的代码是:
class exampleClass {
[string]Create() {
try {
$rsa_Base64 = "string"
return $rsa_Base64
}
catch {
{...}
}
finally {
Remove-Item -Path $env:TEMP\test.txt
}
}
}
在这种情况下,我收到错误:Not all code path returns value within method.
如果我将 return
语句移动到 finally
块,我会收到错误:Flow of control cannot leave a Finally block.
我想添加 finally
块以确保删除 try
语句中创建的文件。
解决方法
您可以避免这个问题,方法是使用 return
语句无条件,在 try
/ {{ 1}}/ catch
语句:
finally
注意使用class exampleClass {
[string]Create() {
$rsa_Base64 = '' # must initialize the variable
try {
$rsa_Base64 = "string"
}
catch {
{...}
}
finally {
Remove-Item -Path $env:TEMP\test.txt
}
return $rsa_Base64
}
}
来初始化变量;使用 ''
最终不会有效,因为该方法是 $null
类型的,并且 PowerShell 不支持 [string]
值中的 $null
并将它们转换为 {{1} }(空字符串)- 有关详细信息,请参阅 this answer。
更恰当地,但是,您应该确保您的 [string]
分支也包含一个作用域退出流控制语句[1] ,即 return
或 throw
(虽然 ''
在技术上也有效,但它应该只用于 脚本文件,因为它退出会话一个整体):
catch
[1] 相比之下,exit
块不仅需要范围退出语句,而且在设计上它不支持任何。原因是这个块在正常的控制流之外运行,仅用于清理。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。