[c#] C #에서 해당하는 Iif

IIfC #에 상응 하는 것이 있습니까? 아니면 비슷한 지름길?



답변

C #에는 ?다른 C 스타일 언어와 마찬가지로 삼항 연산자가 있습니다. 그러나 이것은 IIf(); 두 가지 중요한 차이점이 있습니다.

첫 번째 차이점을 설명하기 위해이 IIf()호출에 대한 거짓 부분 인수 DivideByZeroException는 boolean 인수가 인 경우에도를 발생시킵니다 True.

IIf(true, 1, 1/0)

IIf()은 함수일 뿐이며 모든 함수와 마찬가지로 모든 인수는 호출이 이루어지기 전에 평가되어야합니다. 달리 말하면, 전통적인 의미에서 단락 IIf()되지 않습니다 . 반면에이 삼항 표현은 단락을 일으키므로 완벽하게 괜찮습니다.

(true)?1:1/0;

다른 차이점은 IIf()형식이 안전하지 않다는 것입니다. 유형의 인수를 허용하고 반환합니다 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() 연산자 를 제공합니다 . 유형 추론을 사용하여 반환되는 내용을 알고 있으며 실제로는 함수가 아닌 연산자입니다. 즉, 함수 의미가 있더라도 표현식을 미리 평가해도 문제가 없습니다.


답변

VB.NET :

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

씨#

someBool ? "true" : "false";


답변

삼항 연산자

bool a = true;

string b = a ? "if_true" : "if_false";


답변

병합 연산자 ??도 유용합니다.

VB :

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

씨#:

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


답변

삼항 연산자 ?

string newString = i == 1 ? "i is one" : "i is not one";


답변

거기에 진술을 넣을 수 없다는 점에서 제한적입니다. 값 (또는 값으로 반환 / 평가되는 것) 만 입력하여 반환 할 수 있습니다.

이것은 작동합니다 ( ‘a’는 Blah 클래스 내의 정적 정수입니다)

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 및 아마도 다른 언어를 사용하여 여기에 명령문을 넣을 수 있습니다.