c#에서 iif 동등한
-
03-07-2019 - |
문제
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와 아마도 다른 언어로 인해 진술을 할 수 있습니다.