- - PR -
VBとC#の3項演算子について
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2008-11-11 21:04
お世話になります。
VB.NET2008にて、文字列のnull判定を、3項演算子(のように)判定したく、 以下のコーディングを行いました。 ---------------- VB ------------------- Dim s As String = Nothing Dim i As Integer = IIf(s Is Nothing, 0, s.Length) --------------------------------------- この時、「s Is Nothing」はtrueなので、「s.length」は評価されずに 「0」が返却される事を期待しているのですが、NullReferenceExceptionが 発生してしまいます。 ちなみに、C#では、以下のコーディングで例外は発生しません。(期待通り) また、javaもC#と同様です。 ---------------- C# ------------------- String s = null; int i = (s == null) ? 0 : s.Length; --------------------------------------- VB,NETのIIf関数は、常に第2・第3引数の式を評価してしまうのでしょうか? VB.NETで、上記C#の3項演算子と同様のコーディングは可能でしょうか? よろしくお願い致します。 | ||||
|
投稿日時: 2008-11-11 21:15
私もつい3日前に知ったんですが、
If 演算子 | ||||
|
投稿日時: 2008-11-11 21:16
VB は門外漢ですが…IIF はショートサーキットはしなかったと思います。それでも大して問題はなかっただろうですし。
で。まぁやっぱり 2008 で式ツリーが出来たときにたぶん問題になったんだと思います。IF という新しい演算子が追加されています。IF(条件, 評価1, 評価2) みたいにやってみてください。 | ||||
|
投稿日時: 2008-11-11 21:17
IIf 関数は関数ですので、当然ながら引数は全て評価されます。
VB2008 に対応する VB9 から、If ステートメントで条件演算が可能になっています。
<追記> かぶった上に、ステートメントじゃなくて演算子っすね。 [ メッセージ編集済み 編集者: Hongliang 編集日時 2008-11-11 21:19 ] | ||||
|
投稿日時: 2008-11-11 21:52
rain様、ya様、Hongliang様、ありがとうございます。
解決致しました!ちょっとビックリしましたが・・。 |
1