C#
にはIIf
がありますか?または同様のショートカット?iif相当のC#
iif相当のC#
答えて
C#が有します "?"他のC言語と同様に、三項演算子である。しかし、これはiifと完全には同じではありません。重要な違いが2つあります。
は最初を説明するために、式が真であるにも関わらずiif
は単なる機能であり、すべての引数は呼び出し前に評価されなければならないのでDIVIDEBYZERO例外が発生します。この
iif()
コール:
iif(true, 1, 1/0)
は、別の言い方をすれば、IIFあなたの質問が示すように、はの伝統的な意味で短絡していません。一方、この三元表現はありませんので、完全に罰金です:
(true)?1:1/0;
他の違いはiif
がタイプセーフされていないということです。それはタイプobject
の引数を受け入れて返します。三項演算子は型推論を使用して、どの型を扱っているかを知る。一般的な実装でこれを非常に簡単に修正できますが、それはそのままの状態で行うことができます。
あなたが本当に(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以降の3進演算子は、新しいIf
オペレータを提供します。この演算子はC#の3進数のように機能します。それは型推論を使用して戻り値が何であるかを知り、それは関数ではなく演算子なので、関数のセマンティクスを持っていても式を事前評価することで問題はありません。
VB9は真の三項演算子をサポートしています。 If(SomeBool、MessageBox.Show( "True")、MessageBox.Show( "False")) ここにあるように:http://community.bartdesmet.net/blogs/bart/archive/2007/08/ 31/visual-basic-9-0-the-if-ternary-operator.aspx – snarf
最後の段落で言及しましたが、質問は特にIIf()に関するものでした。 –
三項演算子
bool a = true;
string b = a ? "if_true" : "if_false";
私はそこに文字列b =(a? "asdf": "dsrs")というコメントを追加します。つまり、それがどのように動作するかをよりよく理解し、それが本当に奇妙で無意味なものではないことを見ることが可能です(文字列b = a)? "sdf": "sdsdf")。 – barlop
それは?
string newString = i == 1 ? "i is one" : "i is not one";
VB.NET三項演算子です:
If(someBool, "true", "false")
C#
someBool ? "true" : "false";
これは単純な式に当てはまりますが、代替式に副作用がある場合、2つの形式は完全に等価ではありません。 Iif(t、foo()、bar())はfoo()とbar()の両方を呼び出します。 foo():bar()はfoo()またはbar()のどちらか一方だけを呼び出しますが、両方を呼び出すことはできません。詳細については、この質問に対するJoel Coehoornの答えを参照してください。 –
"IIf"ではなくVB.NETの "If"関数を使用して、2つのコードブロックが同等になるように更新されました。 –
も有用で??合体演算子である:
VB:
Return Iif(s IsNot Nothing, s, "My Default Value")
C#:
return s ?? "My Default Value";
booleanExpression ? trueValue : falseValue;
例:
string itemText = count > 1 ? "items" : "item";
http://zamirsblog.blogspot.com/2011/12/c-vb-equivalent-of-iif.html
あなたがそこに文を置くことができないという点で制限されています。あなただけ(丸括弧の間impicitlyある
Blah.a=Blah.a<5?1:8;
(「」クラス何とか内の静的なint型である)
この作品を返すために、値(または値に評価さ/戻る事を)置くことができます等号と疑問符)。
これは機能しません。
Blah.a = Blah.a < 4 ? Console.WriteLine("asdf") : Console.WriteLine("34er");
or
Blah.a = Blah.a < 4 ? MessageBox.Show("asdf") : MessageBox.Show("34er");
したがって、戻り値にはc#3値演算子しか使用できません。だから、ifの短縮形のようなものではありません。 Javascriptやその他の言語では、そこに文を入れることができます。
- 1. httplib相当のC
- 2. Objective-C相当のJavaバイト[]
- 3. C#相当のNumpy Where
- 4. C#でJOptionPane相当の?
- 5. madSHI MadExcept相当(C#の)
- 6. Oracle Listagg相当のラムダC#
- 7. javascriptでC#DateTime.MaxValue相当の
- 8. C#Java HashMap相当の
- 9. Objective-Cに相当するC#のオーバーライド
- 10. C#Message.CreateMessage()Android/Java相当品
- 11. VBA:GoalSeek C#に相当する
- 12. NSData、NSDictionary、NSArray相当品C++
- 13. BufferedImage.getRGB C#相当ですか?
- 14. db.repairDatabase()に相当するC#
- 15. C#でcurl -u相当?
- 16. C++に相当する。cin.peek()
- 17. (パスカルから)C/C++に相当する
- 18. Objective-C/Cocoaに相当するC#ManualResetEvent
- 19. .NETのTask.DelayのC++に相当する?
- 20. JavaのThread.setDefaultUncaughtExceptionHandler()に相当するC#?
- 21. C++でJavaのIllegalArgumentExceptionに相当する
- 22. C#でJavaの "ByteBuffer.putType()"に相当する
- 23. C#のJavaマップに相当する
- 24. .NET 2.0相当のC#拡張メソッド
- 25. perrorのC++に相当しますか?
- 26. C++ JavaのBlockingQueueに相当する
- 27. C++ 11 std相当のBoost has_dereference
- 28. Objective-Cに相当するJavaのBlockingQueue?
- 29. Objective-Cに相当するJavaのInteger.toOctalString()?
- 30. Objective-Cの@ "string"に相当するPHP
「ショートサーキット」(ブール演算子に関して特定の意味を持つ)ではなく、「ショートカット」を意味すると思います。そうですか? – Blorgbeard