45

少しデバッグしているので、eventArgs 値をログに記録したい

私は基本的に行う単純な行を持っています:

logLine = "e.Value: " + IIf(e.Value Is Nothing, "", e.Value.ToString())

IIF 関数を理解する方法は、e.Value が Nothing (null) の場合は空の文字列を返す必要があり、そうでない場合は値の .ToString を返す必要があります。ただし、NullReferenceException を取得しています。これは私には意味がありません。

何か案は?

4

3 に答える 3

84

IIfは実際の関数なので、すべての引数が評価されます。Ifキーワードは、VB.NET 2008 に追加され、期待される短絡機能を提供します。

試す

logLine = "e.Value: " + If(e.Value Is Nothing, "", e.Value.ToString())
于 2009-01-09T17:33:55.420 に答える
4

VB は Iif で短絡評価を行いません。あなたの場合、 e.Value が何もないかどうかに関係なく、 e.Value.ToString() が評価されています。

于 2009-01-09T17:33:53.207 に答える
3

これは予期される動作です。

IIF関数です。したがって、関数のパラメーターは、関数に送信される前に評価されます。

対照的に、C# の三項演算子は、三項の式が true の場合に 2 番目のパラメーターの評価を防止する言語構造です。

于 2009-01-09T17:33:53.953 に答える