2011-10-18 3 views
2

나는이 방법을 가지고있다 :이 행은 무엇을합니까, 어떤면에서 삼항 연산자를 읽어야합니까?

public static int SetFlag(this int i, int flag, bool set = true) 
{ 
    return (set) ? i | flag : ((i & flag) != 0) ? (i-flag) : i; 

    if(
} 

단지 그것을 읽는 방법을 궁금해한다. 2 개의 3 차원 조짐이 있다고 말하는 것입니까? 오른쪽에서 왼쪽 또는 왼쪽에서 오른쪽으로 읽습니까?

+0

, 나는 그대로 이해하려고 귀찮게 그 코드를 리팩토링, 그리고 것입니다. 단순하게 유지하십시오. –

+0

@JasonEvans 테스트 케이스가 없으면 리팩토링해서는 안됩니다. :) –

+0

Resharper 라이센스를 구입하면 "if-statement와 바꾸기"를 클릭 할 수 있습니다 : operator –

답변

4

그 코드에 해당합니다. 왼쪽에서 오른쪽으로 읽으십시오.

그것은

if (set) 
    return i | flag; 
else 
    if ((i & flag) != 0) 
    return i-flag; 
    else 
    return i; 
+0

'else'가 필요 없습니다. – James

+0

알아,하지만 문법에 대한 설명이 잘되어있어. 더 이상 최적화 할 수도 있지만 예제의 3 진 구문에 대한 설명처럼 설명이되지는 않습니다. – jishi

+0

저는 지금 관심이 있습니다 - 어떻게 더 최적화 할 수 있습니까? :) – James

1

예, 두 개의 삼항 연산자가 있습니다. 당신은 처음부터 괄호 안에, 그리고 나서 삼항 연산자에 의해 안쪽에서부터 읽습니다.

+0

안쪽이 오른쪽입니까? – Exitos

3

예 여기에는 2 가지 조건이 있습니다. 내가 그것을 깰 경우

if(set) 
{ 
    return (i| flag); 
} 
else if((i& flag) != 0) 
{ 
return (i-flag); 
} 
else return i; 

이 많은 반환 진술하고 동일 삼항 연산자입니다 위의 코드에 유의하시기 바랍니다처럼

은, 그것은 보인다. return 문은 없지만 가독성을 위해 복잡한 것은 아닙니다. 그래서 코드를 리팩터링하는 것이 좋습니다.

if (set) 
    return i | flag; 
else 
    if ((i & flag) != 0) 
     return i-flag; 
    else 
     return i; 
0
if set is true 

then return i | flag 

else if (i&flag) !=0 

then return i-flag 

else return i 
1

그것은 두 개의 원 사업자입니다 :

0

에 해당이 좋아 읽기 :

if (set) { 
    return i | flag; 
} else { 
    return ((i & flag) != 0) ? (i-flag) : i; 
} 
+0

다른 사람이 사용한 쓸모없는 학교가 있습니다 :-) – xanatos

+0

그 학교는 C/C++입니까? – Ankur

+0

음 ... Resharper에서 본 것 같아서 C# – xanatos

0
return (set) ? i | flag : ((i & flag) != 0) ? (i-flag) : i; 

동등한 지금

return (set) ? 
    i | flag : 
    ((i & flag) != 0) ? 
     (i-flag) : 
     i; 

선명하게

에? 그리고 나는 몇몇 괄호가 쓸모 없다고 말할 것이다.

return set ? 
    i | flag : 
    (i & flag) != 0 ? 
     i - flag : 
     i; 
1
int result; 

if(set){ 
    result = i | flag; 
} else { 
    if((i & flag) != 0) { 
     result = i - flag; 
    } else { 
     result = i; 
    } 
} 

return result; 

OR

if(set) 
    return i | flag; 
else if((i & flag) != 0) 
    return i - flag; 
else 
    return i; 

OR

if(set) 
    return i | flag; 
else if((i & flag) != 0) 
    return i - flag; 
return i; 
0

(SET)? 나는 | 플래그 : ((i & 플래그)! = 0)? (I-플래그) : 내가

이 동일 : 신발에

if (set){ 
    i | flag 
}else{ 
    if((i & flag) != 0){ 
    (i-flag) 
    }else{ 
    i 
    } 
} 
0
if(set) 
    return i | flag; 
else if((i & flag) != 0) 
    return i - flag; 
return i; 
관련 문제