【发布时间】:2016-03-08 20:42:47
【问题描述】:
我正在破解一些旧的 VB 代码,如果捕获到异常,我希望函数能够提前返回,但如果是 System.UnauthorizedAccessException,函数应该继续。就这样我没有得到XY'ed,我知道这是一个奇怪的要求,但我正在用C#重写代码,我只需要看看这个结果。我知道可能有更好的方法来做到这一点。这是原始代码:
Try
doSomeStuffWithFiles(files)
Catch ex As Exception
MsgBox("Far Field: error in reading / writing to far field file." & Chr(13) & ex.Message)
Exit Sub
End Try
所以我添加了几行:
Catch ex As Exception
MsgBox("Far Field: error in reading / writing to far field file." & Chr(13) & ex.Message)
If TypeOf ex IsNot System.UnauthorizedAccessException Then
Exit Sub
End If
End Try
现在,我不是 VB 专家,但据我所知,这是完全有效的 VB。它还与MSDN 上的TypeOf 的示例代码完全匹配。但是,此代码无法编译。我收到此错误:
Error 21 'Is' expected. C:\FilePath 3114 26 Project
Error 22 'UnauthorizedAccessException' is a type in 'System' and cannot be used as an expression. C:\FilePath 3114 32 Project
如果我将该行更改为
Catch ex As Exception
MsgBox("Far Field: error in reading / writing to far field file." & Chr(13) & ex.Message)
If TypeOf ex Is System.UnauthorizedAccessException Then
Exit Sub
End If
End Try
然后一切都编译并运行良好。 (没有倒退的逻辑)
我使用的是 Visual Studio 2013,目标是 .net 框架 2.0。
那么IsNot无效的原因是什么?
【问题讨论】:
-
您能否添加一些有关用于构建项目的 Visual Studio 版本和框架版本的信息?
-
应该是
If Not TypeOf ex Is System.UnauthorizedAccessException。简短回答:IsNot 运算符不能用于比较从 TypeOf 运算符返回的表达式。相反,您必须使用 Not 和 Is 运算符。 请参阅 Here -
在 VS2015 之前,仅支持
TypeOf var Is语法。见:https://msdn.microsoft.com/en-us/library/0ec5kw18(v=vs.120).aspx#Anchor_1 -
@TnTinMn 我赞成将其作为答案
-
@CoderDennis,谢谢,但 OP 的真正问题应该是:“如何使用文档?”在阅读问题后,我看到有一个指向最新文档版本的链接。 OP 以防万一您不知道,您可以单击文档中的“其他版本”下拉菜单以查看早期文档。有一次,这样做是谨慎的做法,以便您可以查看最新版本中缺少的“社区添加”部分。
标签: vb.net