我正在尝试设置一个布尔值,以便在我的代码中分享它。我在使用扩展运算符(C#中的隐式运算符)时遇到了麻烦。
Public Class CancellationToken
Public Property IsCancelled As Boolean
Public Shared Widening Operator CType(a As CancellationToken) As Boolean
Return a.IsCancelled
End Operator
End Class
以下代码可以正常使用:
Sub DoIt(IsCancelled As CancellationToken)
Do Until IsCancelled
...
Loop
End Sub
但是这个块报告了一个编译时错误:没有为类型'CancellationToken'和'Boolean'定义运算符'Or'。
Sub DoIt(IsCancelled As CancellationToken)
Dim ContentLength As Long = ...
Do Until IsCancelled OrElse ContentLength = 0
...
Loop
End Sub
显然,它被评估为ContentLength = 0
布尔值。鉴于OrElse
期望每边都有布尔值,为什么IsCancelled
不会隐式转换为布尔值?
创建IsTrue
,IsFalse
,Or
和And
运算符也不能解决问题。我启用了Option Explicit和Option Strict。