VB.netのIIf関数とIf演算子について
C#で使える三項演算子がVB.netには無い。 代わりに、IIf関数とIf演算子というのがある。使い方とか注意点について…
結論
理由とか
まずは、使い方↓
よくありそうな、TextBoxの値を数値として代入するケース。(TextBox1には数字しか入らないと考えて欲しい)
空だったら0として扱いたい訳だけど、If演算子ならTextBox1.Textが空なら、問題なく0が入る。 一方で、IIf関数を使った場合は、FormatExceptionが起きる。
何故か
IIf関数では、第一引数(評価式)の結果によらず、第二、第三引数の評価を行う。
そのため、評価して欲しくない Integer.Parse("")
が実行されて、FormatExceptionが起きる。
IIf関数は、If…Else…End If式と等価ではないわけだ。 VB使ってると、紛らわしい関数とかクラスとか、たまに出てくるのでホントやめてくれーって思う。
If演算子 != If…Else…End If
If演算子もIf…Else…End Ifと等価ではなかった。 ここはIIf関数も同じで、If演算子の返り値は Object型 なので、返り値はちゃんとCastしてやる必要がある。やはりVB.netは使わないほうがいい。 *1
?: 演算子 (C# リファレンス) | Microsoft Docs