Я столкнулся с чем-то запутанным или потенциально ошибкой в Visual Studio 2010 при определении интерфейса в приложении VB: при определении метода интерфейса с параметром по умолчанию типа Double, используя Постоянная Double.NaN как значение по умолчанию вызывает некоторые проблемы с редактором кода/intellisense/precompiler.Использование Double.NaN в необязательном параметре на интерфейсе
Следующий код подчеркивает «INaNTest» и «INaNTest.DoSomething», утверждая, что «DoSomething» не может реализовать «DoSomething», потому что нет соответствия к югу от интерфейса «INaNTest»:
Public Class NaNTest
Implements INaNTest
Public Sub DoSomething(ByVal x As Double,
Optional ByVal a As Double = Double.NaN)
Implements INaNTest.DoSomething
End Sub
End Class
Public Interface INaNTest
Sub DoSomething(ByVal x As Double,
Optional ByVal a As Double = Double.NaN)
End Interface
Удаление реализации и начиная с:
Public Class NaNTest
Implements INaNTest
End Class
Public Interface INaNTest
Sub DoSomething(ByVal x As Double,
Optional ByVal a As Double = Double.NaN)
End Interface
, где сейчас «NaNTest» указывается (Class «NaNTest» должен ...), нажав клавишу возврата в конце строки «Реализует INaNTest» (т.е. автоматически вставит реализации) добавляет осуществление:
Public Sub DoSomething(ByVal x As Double,
Optional ByVal a As Double = -1.#IND)
Implements INaNTest.DoSomething
End Sub
, в котором редактор кода затем подчеркивает «#» (Идентификатор ожидается). Таким образом, код автоматически добавляет неверный код.
В качестве альтернативы в настоящее время, начиная с исходным кодом выше, с помощью кнопки коррекции параметров ошибок на подчеркнутый «INaNTest.DoSomething» и выбрав «Создать метод заглушку для„DoSomething“в„INaNTest“, добавленный метод заглушка:
Sub DoSomething(ByVal x As Double,
Optional ByVal a As Double = NaN)
, где теперь «NaN» был отделен от «Двойной». префикс и подчеркнутый («NaN» не объявлен, он может быть недоступен из-за его уровня защиты.) Редактор кода снова вставил неверный код.
Есть ли правильное решение для использования Double.NaN в качестве значения по умолчанию для метода, определенного на интерфейсе, в VB.net или существует фундаментальная причина, по которой это невозможно?
Большое спасибо, JCollins
Спасибо Хансу, я обнаружил, что Positive и NegativeInfinity работают также, хотя, как вы говорите, нет, если IDE выполняет задачу. Мне все еще интересно узнать, существует ли какой-либо синтаксис, правильный для NaN, или, более просто, если исходный синтаксис верен, а IDE просто ложно идентифицировала ошибку. –
Double.NaN - правильный синтаксис. Это просто не работает из-за недостатка в компиляторе. Это почти наверняка вызвано нечетным поведением NaN: Double.NaN! = Double.NaN. В компиляторе им понадобится специальный случай. Нечетное поведение среды IDE является отдельной проблемой. –