我正在破解一些舊的VB代碼,並且我想要一個函數在發現異常時提前返回,但如果它是System.UnauthorizedAccessException
,函數應該繼續。只是所以我沒有得到XY'ed,我知道這是一個奇怪的要求,但我用C#重寫了代碼,我只需要看看這個結果。我知道可能有更好的方法來做到這一點。這裏是原代碼:這是爲什麼用「Is」編譯而不用「IsNot」編譯?
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 。它也完全符合TypeOf
的示例代碼MSDN。但是,這段代碼無法編譯。如果我把上面一行
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
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
然後一切編譯和運行良好:我得到這個錯誤。 (Sans邏輯向後)
我正在使用visual studio 2013,並以.net framework 2.0爲目標。
那麼IsNot
無效的原因是什麼?
您是否可以在用於構建項目的Visual Studio版本和Framework版本上添加一些信息? – Steve
應該是'如果不是TypeOf ex是System.UnauthorizedAccessException'。簡短回答:** IsNot運算符不能用於比較從TypeOf運算符返回的表達式。相反,您必須使用Not和Is運算符。**請參閱[Here](https://msdn.microsoft.com/en-us/library/t3bat82c.aspx) – Codexer
在VS2015之前,TypeOf var Is語法是所有支持的。請參閱:[https://msdn.microsoft.com/en-us/library/0ec5kw18(v=vs.120).aspx#Anchor_1](https://msdn.microsoft.com/en-us/library/0ec5kw18 (v = vs.120).aspx#Anchor_1) – TnTinMn