2012-01-03 17 views
1

IIf関数は、式を評価する際に真の部分と偽の部分の両方を解析します。この声明を試してみてください!IIf関数の解析

例:

Dim sample = "" 
Dim result = IIf(String.IsNullOrWhiteSpace(sample), 0, Integer.Parse(sample)) 
Exception = "Input string was not in a correct format." 

修正:あなたがにリンクされているMSDNドキュメントから

Dim result = Integer.Parse(IIf(String.IsNullOrWhiteSpace(sample), 0, sample)) 

http://msdn.microsoft.com/en-us/library/27ydhh0d(v=VS.71).aspx

+0

はい、正しいです。 'IIF'は単なる関数であり、関数は実行する前に常に引数を評価します。あなたがリンクしているMSDNページの*注釈/注*は明示的にこれを示しています。あなたの質問は何ですか? – Amadan

+1

の可能な複製[なぜこれはIIF関数として機能しませんが、IF声明として?](http://stackoverflow.com/questions/3701787/why-wont-this-work-as-an-iif -function-but-as-an-if-statement) – Curt

答えて

3

抜粋:

引数リストのための準備の一環として、への呼び出しIIf、Visual Basicコンパイラはすべての式のすべての関数を呼び出します。これは、Expressionによって他の引数が選択されている場合、呼び出されていない特定の関数に依存できないことを意味します。

これはむしろ予期せぬ動作であり、設計に欠陥がある可能性がありますが、基本的に正しいと判断されるものと判断します。

3

Iifはすべての引数を評価するという点で正しいです。単なる関数なので、それを避けることはできません。

ただし、VB.netにはしばらくの間、If演算子がありました。表面的にはIifに似ていますが、言語に組み込まれているため、機能の制限はありません。それは短絡することができます - 条件のみと正しい式が評価されます。実際、C#の?:オペレータのようなものです。

result = If(String.IsNullOrWhiteSpace(sample), 0, Integer.ParseInt(sample)) 

それとも、この場合には、あなたはそれが数を解析できなかった場合には0にresultを設定します

Dim result as Integer 
Integer.TryParse(sample, result) 

ために解決することができるかもしれません。