문제

c # in c #

 bool validName = true;
 if (validName)
 {
     name = "Daniel";
     surname = "Smith";
 }
 else
 {
     MessageBox.Show("Invalid name");
 }
.

이와 비슷한 것이 일이 일어나지 만 정확한 시나리오에서는 내가 Name= ValidName을했으면 값을 할당 할 수 있습니다."Daniel": "유효하지는 않습니다."그러나 아래에서 할 수 있는지 궁금해하고 있었습니까?

     validName ? 
     {
         name = "Daniel";
         surname = "Smith";
     } 
     : 
     {
         MessageBox.Show("Invalid name");
     }
.

도움이 되었습니까?

해결책

남용 람다 구문 및 유형 추론 :

(validName
    ? (Action)
        (() =>
            {
                name = "Daniel";
                surname = "Smith";
            })
      : () =>
           {
                MessageBox.Show("Invalid name");
           })();
.

나는 알고, 실제로 대답이 아닙니다.명령문이 더 나은 방법 : 분명히이 구문은 덜 읽을 수 없으며 더 중요한 것은 런타임 동작이 다른 것이 있으며 람다 표현에 의해 생성 된 잠재적 폐쇄로 인해 의도하지 않은 부작용으로 이어질 수 있습니다.

구문도 조금 암호입니다.먼저 두 개의 Action 객체를 만듭니다. 그런 다음 ?: 연산자가 선택한 결과를 선택하고 마지막으로 선택한 결과가 실행됩니다.

var a1 = new Action(() => { /* if code block */ });
var a2 = new Action(() => { /* else code block */ });

Action resultingAction = test_variable ? a1 : a2;

resultingAction();
.

나는 그 결과 조치를 제자리에서 실행하여 하나의 문장에 함께 넣었다.Briefer조차 만들기 위해 첫 번째 람다 표현식을 Action (명시 적으로 생성하는 대신)와 유형 추론을 활용하는 대신에 두 번째 캐스트를 중단합니다.

다른 팁

당신이 그렇게 할 수 있다고 가정 해 봅시다.왜?

동기 부여는 무엇입니까?

줄이 적습니까?차이를 만들기에 충분하지 않습니다. 공연?아무도, 컴파일러가 당신을 위해 물건을 처리 할 것입니다. 명쾌함?대부분의 개발자가 더 명확하고 쉽게 이해할 수 있고 쉽게 이해할 수 있습니다.

나는 확실히, 당신이 충분히 열심히 일했다면, 당신은 이것을 다루는 방법을 찾을 수 있습니다 (가장 가능성이있는 kludge). 그러나 나는 여전히 그 이유를 결정할 수 없다.

아니오.

Ternary 연산자 (? :? :)는 전체적으로 표현식이어야합니다. 즉, 뭔가에 할당 할 수있는 것입니다.

조건 연산자는 두 번째 및 세 번째 피연산자가 값을 반환하지 않는 값을 반환하는 표현식이며 값으로 해결되지 않는 명령문이 아닙니다.현재 수행중인 작업 중 하나에서 리턴하려는 값이 없습니다.

코드를 컴파일하기 위해 무의미한 가치를 반환 할 수 있지만, 그 시점에서 귀하의 요구 사항에 맞는 올바른 의미 운영자 인 if를 사용하는 것보다 톤 더 많은 작업을 추가 할 수 있습니다.기술적으로 가능하면 좋은 생각이 아닙니다.

fullName = validName == true ? returnName(firstName)+" "+returnName(lastName) : validName == false ? invalidName("Invalid Name") : null


public string returnName(string name)
{
return name;
}

public string invalidName(string invalid)
{
MessageBox.Show(invalid);
return null;
}
.

다른 모든 사람들이 아마 그것이 실제로하고 싶지 않을 것입니다. 그러나 그것은 가능합니다 : p

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