Я пытаюсь создать булево значение, чтобы поделиться им со своим кодом. У меня проблемы с использованием оператора расширения (неявного оператора в 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
Но этот блок сообщает об ошибке времени компиляции: оператор 'Or' не определен для типов 'CancellationToken' и 'Boolean'.
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.