문제

나는 조금 둘러 보았고 동등한 질문을 찾지 못했습니다.
이것은 나쁜 코딩 관행입니까? 쉽게 읽을 수 있지만 코드를 읽는 사람에게는 너무 비밀 스러운가?

bool? testBool = null;  
string result;  
result = (testBool ?? false ? "Yes" : "No");  

편집하다: 끔찍한 코드에 대해 모든 사람에게 사과드립니다! 여기에 작업 예가 있습니다 ..
나는 대답의 속도에 약간 압도적입니다. 나는 이것을 삭제하고 제대로 할 예정 이었지만 이미 4 개의 답장을 받았습니다!

도움이 되었습니까?

해결책

나는 Parens를 추가하여 무슨 일이 일어나고 있는지를 명확히합니다.

bool? testbool = null;
string result;
result = (testbool ?? false) ? "Yes" : "No";

그것으로, 나는 그것으로 괜찮을 것입니다. 그것 없이는, 나는 무슨 일이 일어나고 있는지 알아 내기 위해 조금 연구해야했습니다 (심지어 컴파일된다면 - 내 머리 꼭대기에서 운영 순서를 모르겠습니까? : vs. ??).

다른 팁

그것은 비밀스러운 측면에 약간 있습니다. 표현이 다음과 같이 평가되는지는 분명하지 않습니다.

string result = (testbool ?? false) ? "Yes" : "No";

또는:

string result = testbool ?? (false ? "Yes" : "No");

당신은 사용할 수 있습니다 GetValueOrDefault 대신 무효 유형의 방법 ?? 더 읽기 쉬운 운영자 :

bool? testbool = null;
string result = (testbool.GetValueOrDefault(false) ? "Yes" : "No");

편집 : 원래 질문은 사용되었습니다 int?. 이제 고정되었습니다.

그 코드는 컴파일조차하지 않을 것입니다. 그렇습니다. 너무 비밀 스럽다고 말할 것입니다.

오타를 제쳐두고 쉽게 게시하지 않고 게시했다는 사실 발견 문제가 있다는 bool LHS가 int?)는 당신이 그것을 올바르게 얻을 때에도 좋은 생각이 아니라고 제안합니다.

실제 예를 볼 필요가 있지만 나는 대개 Null Coalescing 연산자를 사용하여 이것을 하나의 명령문으로 나누고 다른 조건을 사용하여 조건부 연산자를 사용하십시오. 또 다른 옵션 연산자와 관련하여 무효 유형의 동작을 사용하는 것입니다 ... 그러나 다시, 그것은 합리적으로 모호. (나는 그 행동이 무엇인지 정확히 상기시켜야했다!)

나는 일반적으로 Null Coalescing Operator를 좋아하지만 조건부 운영자와 결합하면 약간의 모호한 것으로 생각합니다. 나는 단일 표현식 (예 : 대안이 추가 방법을 도입하는 초기화)에 상당한 이점이있는 경우에 그것을 받아 들일 것이라고 생각하지만 일반적으로 나는 그것을 두 가지 진술로 나누는 것을 선호합니다.

편집 : 하나의 대안 이것 특정 사례는 단지 "true"와 비교하는 것입니다. bool?:

result = (testBool == true) ? "Yes" : "No";

물론 괄호는 필요하지 않지만 명확성 IMO를 추가하십시오.

나는 이것이 더 간단하다고 생각한다 : 결과는 "예"일 뿐이다. testBool 실제로 사실입니다. 그렇지 않으면 "아니요"입니다. "기본값"을 원한다면 다음을 쓸 것입니다.

result = (testBool == false) ? "No" : "Yes";

그것을 감싸고 괜찮다고 생각합니다.

string result = (testbool ?? false) ? "Yes" : "No";

그렇지 않으면 의도 된 운영 순서는 작동하더라도 분명하지 않습니다.

(편집 : Jonathan은 나를 꼬집음으로 이겼습니다.)

그렇지 않아야합니다

bool? testbool = null;

?

여기서 무효를 사용할 필요가 없습니다. 이것은 두 번 생각하게 만들므로 정말로 코딩 할 것입니다.

bool testbool = false;
string result;
result = testbool ? "Yes" : "No";

당신의 예제가 불완전했는지는 모르겠지만, 기본값으로 변수를 초기화하는 것이 무효가 된 것보다 더 넓다고 생각합니다. 선언 후 값을 설정하는 연산자.

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