82

IIfC#に同等のものはありますか? または同様のショートカット?

4

7 に答える 7

123

C# には、?他の C スタイルの言語と同様に、三項演算子があります。IIf()ただし、これは;と完全に同等ではありません。2 つの重要な違いがあります。

最初の違いを説明すると、ブール値の引数が であっても、このIIf()呼び出しの false-part 引数によって が発生します。DivideByZeroExceptionTrue

IIf(true, 1, 1/0)

IIf()は単なる関数であり、すべての関数と同様に、呼び出しが行われる前にすべての引数を評価する必要があります。別の言い方をすれば、伝統的な意味での短絡IIf()はありません。一方、この三項式はショートサーキットを行うため、完全に問題ありません。

(true)?1:1/0;

もう 1 つの違いはIIf()、タイプ セーフではないことです。type の引数を受け入れて返しますObject。三項演算子タイプ セーフです。型推論を使用して、処理している型を認識します。IIF(Of T)()これは、独自の一般的な実装で非常に簡単に修正できますが、そのままではそうではないことに注意してください。

本当にIIf()C#が必要な場合は、次のようにすることができます:

object IIf(bool expression, object truePart, object falsePart) 
{return expression?truePart:falsePart;}

またはジェネリック/タイプセーフな実装:

T IIf<T>(bool expression, T truePart, T falsePart) 
{return expression?truePart:falsePart;}

一方、VB で三項演算子が必要な場合、Visual Studio 2008 以降では、C# の三項演算子のように機能する新しいIf() 演算子が提供されます。型推論を使用して返されるものを認識しますが、実際には関数ではなく演算子です。これは、関数のセマンティクスがあっても、式を事前評価しても問題がないことを意味します。

于 2009-05-05T01:06:46.940 に答える
63

VB.NET:

If(someBool, "true", "false")

C#

someBool ? "true" : "false";
于 2009-05-05T00:49:05.140 に答える
13

三項演算子

bool a = true;

string b = a ? "if_true" : "if_false";
于 2009-05-05T00:49:03.097 に答える
10

合体演算子 ?? も便利です。

VB:

Return Iif( s IsNot Nothing, s, "My Default Value" )

C#:

return s ?? "My Default Value";
于 2009-05-05T01:05:51.310 に答える
5
booleanExpression ? trueValue : falseValue;

例:

string itemText = count > 1 ? "items" : "item";

http://zamirsblog.blogspot.com/2011/12/c-vb-equivalent-of-iif.html

于 2011-12-08T02:04:03.667 に答える
1

三項演算子です?

string newString = i == 1 ? "i is one" : "i is not one";
于 2009-05-05T00:49:03.783 に答える
0

そこにステートメントを入れることができないという点で制限されています。値(または値を返す/評価するもの)のみを配置して、返すことができます

これは機能します(「a」はクラスBlah内の静的intです)

Blah.a=Blah.a<5?1:8;

(丸かっこは、等号と疑問符の間に暗黙的にあります)。

これはうまくいきません。

Blah.a = Blah.a < 4 ? Console.WriteLine("asdf") : Console.WriteLine("34er");
or
Blah.a = Blah.a < 4 ? MessageBox.Show("asdf") : MessageBox.Show("34er");

したがって、値を返すには c# 三項演算子のみを使用できます。したがって、if の短縮形とはまったく異なります。Javascript やおそらく他のいくつかの言語では、そこにステートメントを入れることができます。

于 2016-04-20T11:29:31.720 に答える