//保留了原文 ()为大概的意思
VB で使用していた IIf 関数の代わりに VB2008 からは If 演算子 を使用可能となった。 また、 C# では、条件演算子 (?:) で同等の記述が可能である。 ここでは、それぞれの使用方法について示す。
(自VB2008开始if运算符代替VB中的IIf函数,相当于C#的(?:)下面就是各自的使用方法举例)
[ C# ] 条件演算子 (?:)
(条件运算符)
[C#]
int score = 80;
int average = 60;
// 条件が真ならgood、偽ならbadが返される(条件真返回good,条件假返回bad)
object ret = score > average ? "good" : "bad";
以下のように真と偽の場合で異なる型を返すことはできないので注意が必要である。 ただし、全く異なる型を返すことはお勧めできないが、回避することも可能なのでその方法も示す。
(像下面的例子 用对象类型的时候 不能成功的返回值,但是可以有解决的办法)
// 異なる型を返すことはできない(コンパイルエラー)(转换失败)
//object ret = score > average ? new List<string>[1] : new Dictionary<string, string>[2];
// どうしても、異なる型を返したい場合の回避方法(解决办法 定义两个object类型)
object a = new List<string>[1];
object b = new Dictionary<string, string>[2];
object ret = score > average ? a : b;
[ VB ] IIf 関数 (IIF函数)
IIf 関数の使い方はここでは省略するが、参考サイトにあるように以下のコードでは 例外(System.DivideByZeroException)が発生する。(iif的使用方法下面)
Dim number As Integer= 12
Dim divisor As Integer = 0
' 例外発生
Dim ret As Integer = IIf(divisor <> 0, number \ divisor, 0) iif(表达式,如果成立返回结果1,不成立返回结果2) iif(条件表达式,1,2)
IIf 関数では、条件(divisor <> 0)が真の場合にのみ、真の演算(number \ divisor)を行うのではなく 常に真偽のいずれの演算も行い、条件によってその結果を返しているために上記のコードで例外が発生する。 前述の If 演算子や C# の条件演算子 (?:)では、条件に結果によって真偽いずれかの演算のみ行われるので このような問題は起こらない。
(注意除数为0的错误情况)