私はVBアプリケーションでインターフェイスを定義するときに、Visual Studio 2010で混乱しているか、または潜在的にバグに遭遇しました。デフォルト値としての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
実装の取り外しと始まる:今すぐ「NaNTestは」ライン「INaNTestを実装」の最後にリターンキーを押す、(クラスのNaNTest "しなければならない...)下線が引かれているところ
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
(すなわち、自動的に実装挿入)を追加します実装:
Public Sub DoSomething(ByVal x As Double,
Optional ByVal a As Double = -1.#IND)
Implements INaNTest.DoSomething
End Sub
コードエディタは、 '#'(識別子が必要です)に下線を引いています。したがって、コードは自動的に正しくないコードを追加しました。
また、上記の元のコードから、下線付きの "INaNTest.DoSomething"のError Correction Optionsボタンを使用して、 "INaNTest"で "DoSomething"のメソッドスタブを生成すると、追加されたメソッドスタブは
Sub DoSomething(ByVal x As Double,
Optional ByVal a As Double = NaN)
ここで、「NaN」は「Double」から離婚しました。接頭辞とアンダーライン( 'NaN'は宣言されていません。保護レベルのためにアクセスできない可能性があります)。コードエディタで無効なコードが再度挿入されました。
VB.netのインターフェイスで定義されているメソッドのデフォルト値としてDouble.NaNを使用する正しい解決策がありますか?それが不可能な根本的な理由はありますか?
多くのおかげで、 JCollins
ありがとう、私は、PositiveとNegativeInfinityが両方とも機能することを発見しました。しかし、あなたが言うように、IDEがタスクを実行する場合はそうではありません。 NaNに正しい構文が存在するかどうか、あるいは元の構文が正しく、IDEが間違ってエラーと誤って識別された場合には、もっと興味があります。 –
Double.NaNは正しい構文です。コンパイラの欠陥のせいで動作しません。これはNaNの奇妙な振る舞いによってほぼ確実に引き起こされます:Double.NaN!= Double.NaN。彼らはコンパイラで特別なケースが必要です。 IDEの奇妙な動作は別の問題です。 –