public string Source
{
get
{
/*
if ( Source == null ){
return string . Empty;
} else {
return Source;
}
*/
return Source ?? string.Empty;
}
set
{
/*
if ( Source == null ) {
Source = string . Empty;
} else {
if ( Source == value ) {
Source = Source;
} else {
Source = value;
}
}
*/
Source == value ? Source : value ?? string.Empty;
RaisePropertyChanged ( "Source" );
}
}
?:
??
연산자 를 If / Else로 정확히 사용할 수 있습니까 ?
내 질문 :
다음을 작성하는 방법? : ?? 연산자
[ 1 ]
if ( Source == null ){
// Return Nothing
} else {
return Source;
}
[2]
if ( Source == value ){
// Do Nothing
} else {
Source = value;
RaisePropertyChanged ( "Source" );
}
간단히 : 아무것도하지 않고 아무것도 반환하지 않고 ?:
??
연산자로 여러 명령을 수행하는 방법은 무엇입니까?
답변
[1]의 경우 할 수 없습니다. 이러한 연산자는 작업을 수행하는 것이 아니라 값을 반환하도록 만들어졌습니다.
표현식
a ? b : c
로 평가 b
하는 경우 a
에 충실하고 평가하여 c
경우 a
false입니다.
표현식
b ?? c
로 평가 b
하면 b
null는 아니고, 평가 c
하는 경우 b
null입니다.
당신이 쓰면
return a ? b : c;
또는
return b ?? c;
그들은 항상 무언가를 반환 할 것입니다.
[2]의 경우 “다중 연산”을 수행하는 올바른 값을 반환하는 함수를 작성할 수 있지만 if/else
.
답변
삼항 연산자 ( ?:
)는 제어 흐름 용이 아니라 조건부 할당 용으로 만 설계되었습니다 . 프로그램의 흐름을 제어해야하는 경우 if
/ 와 같은 제어 구조를 사용하십시오 else
.
답변
로 다스 려 : 연산자 (C # 참조)
조건부 연산자 (? :)는 부울 표현식의 값에 따라 두 값 중 하나를 반환합니다. 다음은 조건부 연산자의 구문입니다.
?? 를 참조하십시오 . 연산자 (C # 참조)
? 연산자는 null 통합 연산자라고하며 참조 형식뿐 아니라 nullable 값 형식에 대한 기본값을 정의하는 데 사용됩니다. null이 아닌 경우 왼쪽 피연산자를 반환합니다. 그렇지 않으면 오른쪽 피연산자를 반환합니다.
그것의 의미는:
[1 부]
return source ?? String.Empty;
[제 2 부] 적용 불가 …
답변
“아무것도하지 않음”은 실제로 작동하지 않습니까?
// Return Nothing 당신은 실제로 null을 반환하고 쓰기를 의미합니다.
return Source;
의미하는 경우 코드 경로를 무시한 다음
if ( Source != null )
{
return Source;
}
// source is null so continue on.
그리고 마지막으로
if ( Source != value )
{ Source = value;
RaisePropertyChanged ( "Source" );
}
// nothing done.
답변
삼항 연산자는 두 값 중 하나를 반환합니다. 또는 조건에 따라 두 개의 문 중 하나를 실행할 수 있지만 의도하지 않은 부작용이 발생할 수 있으므로 일반적으로 좋은 생각이 아닙니다.
bar ? () : baz();
이 경우 ()는 아무 일도하지 않고 baz는 어떤 일을합니다. 그러나 당신은 코드를 덜 명확하게 만들었습니다. 더 명확하고 유지하기 쉬운 더 자세한 코드를 원합니다.
또한 이것은 전혀 의미가 없습니다.
var foo = bar ? () : baz();
()에는 반환 유형이없고 (void) baz에는이 샘플의 호출 시점에서 알 수없는 반환 유형이 있기 때문입니다. 동의하지 않으면 컴파일러는 큰 소리로 불평합니다.
답변
코드의 장황함에 관심이 있다면 표현식을 남용하기보다는 이것을 작성하겠습니다.
if (Source == value) return;
Source = value;
RaisePropertyChanged("Source");
답변
? :는 여정 연산자입니다. (제대로 철자를 썼다고 믿습니다) 사용하기 쉽습니다. 부울 술어에서와 같이? iftrue : ifalse; 그러나 rvalue = predicate와 같이 rvalue / lvalue가 있어야합니다. iftrue : iffalse;
전의 int i = x < 7 ? x : 7;
x가 7보다 작 으면 x가 할당되고, 그렇지 않으면 7이됩니다.
다음과 같이 반환에 사용할 수도 있습니다. return x < 7 ? x : 7;
다시 말하지만, 위와 같이 동일한 영향을 미칩니다.
그래서 Source = Source == value ? Source : string.Empty;
나는 당신이 달성하려는 노력이라고 믿습니다.