문제

a IIf 동등한 C#? 또는 유사한 단축키?

도움이 되었습니까?

해결책

C#은 다음과 같습니다 ? 다른 C 스타일 언어와 마찬가지로 3 배 운영자. 그러나 이것은 완벽하게 동일하지 않습니다 IIf(); 두 가지 중요한 차이점이 있습니다.

첫 번째 차이점을 설명하기 위해, 이에 대한 잘못된 부분 인수 IIf() 호출 원인 a DivideByZeroException, 부울 논쟁은 있지만 True.

IIf(true, 1, 1/0)

IIf() 단지 함수 일 뿐이며 모든 기능과 마찬가지로 모든 인수는 호출이 이루어지기 전에 평가되어야합니다. 다른 방법으로, IIf() 하다 ~ 아니다 전통적인 의미의 단락. 반면에,이 3 가지 표현은 단락을 일으키며 완벽하게 괜찮습니다.

(true)?1:1/0;

다른 차이점은입니다 IIf() 타입 안전하지 않습니다. 유형의 인수를 받아들이고 반환합니다 Object. 3 원 운영자 ~이다 금고를 입력하십시오. 그것은 어떤 유형을 다루고 있는지 알기 위해 유형의 추론을 사용합니다. 참고 자신의 일반적인 상태 로이 문제를 쉽게 고칠 수 있습니다. 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;}

반면에 VBB의 3 차 운영자, Visual Studio 2008을 원한다면 나중에 새로운 것을 제공합니다. If() 운영자 그것은 C#의 Ternary Operator와 같이 작동합니다. 반환 내용을 알기 위해 유형의 추론을 사용하며 실제로 기능이 아닌 연산자입니다. 이는 기능 의미론이 있어도 사전 평가 표현에 문제가 없음을 의미합니다.

다른 팁

vb.net :

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

씨#

someBool ? "true" : "false";

3 원 운영자

bool a = true;

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

Coalesce 연산자도 유용합니다 .? :

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

3 대 사업자입니다 ?

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

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

이것은 작동합니다 ( 'a'는 클래스 블라의 정적 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# Ternary 연산자 만 사용할 수 있습니다. 따라서 IF의 짧은 형태와는 다릅니다. JavaScript와 아마도 다른 언어로 인해 진술을 할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top