blog.toxn

あしあと

VB.netのIIf関数とIf演算子について

C#で使える三項演算子VB.netには無い。 代わりに、IIf関数とIf演算子というのがある。使い方とか注意点について…

結論

  • If演算子使うべき。
  • VB.net使うべきではない。(言い過ぎか)

理由とか

まずは、使い方↓

gist717fda61cb882f349687

よくありそうな、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

IIf 関数

VS2015使ってたらIf演算子はObjectを返さず、第2,3引数の型で返すようになってました。*2

toxn.hatenablog.com

*1:12/10 追記しました。

*2:08/20 追記しました。