2014-03-13 2 views
-4

이것은 이전 질문과 동일하지만 질문을 설명하는 동안 많은 실수를 저질 렀습니다. 그래서 다시 노력하고있어. 제 용어를 용서해주십시오. 그것은 틀릴 수도 있습니다. 나는 프로그래밍에 초보적이다.두 가지 조건을 처리하는 가장 간단한 방법

개체에 대한 두 개의 포인터가 있습니다 (제 생각에는) A와 B입니다. 그들은 다음과 같이 약간 보입니다 :

Class1* A = Blah->Method1(); 
Class2* B = A->Method2(); 

일부 코드를 실행하기 전에 이들의 존재를 확인해야합니다. 여기에 조건은 다음과 같습니다

  • A와 B가 모두 존재 : 만 수행 조치 1
  • 모두가 null됩니다 : 유일한 조치 1
  • 를 수행하여 그 중 하나가 null의 경우, 조치 1 및 조치 2 그들 중
  • 하나는 존재
  • 수행

    if (A){ 
    /*some code here. B is created here */ 
        if (B){ 
         // Perform action1. Action1 always comes before Action2 
         // Perform action2 
        } 
    } 
    else{ 
        //Perform action1 
    } 
    

    이가 사가지 경우에서 3 일 : 여기

내가 지금까지 가지고있는 코드입니다. A가 있지만 B가 널일 경우 실패합니다.

어떻게 향상시킬 수 있습니까? (가능한 경우 가장 안쪽에 //Perform Action 1을 유지하면서. 다른 제안도 환영합니다.)

고맙습니다.

+3

무제한이므로 Action1을 제거 하시겠습니까? –

+0

정말로보아야 할 것은'Action1'은 실제로 조건부가 아니라는 것입니다. 항상 수행됩니다. –

+0

SO에 대해 동일한 질문을 다시하는 것은 거의 좋은 생각이 아닙니다. 이 문제를 올바르게 처리하는 방법에 대해 알아 보려면 [** 도움말 센터 **] (http://stackoverflow.com/help)를 참조하십시오. –

답변

6
  • A와 B가 모두 존재합니다 그들 중 하나가 null의 경우, 조치 1 및 조치 2 그들 중
  • 하나는 존재
  • 수행 만 수행 조치 1
  • 모두 널 (null)입니다 만 조치 1
을 수행

그래서, 정말 당신이 원하는 :

action1(); 

if (a && b) { 
    action2(); 
} 

귀하의 기준 항상action1; if에 의해 보호받을 이유가 없습니다. ab이 모두 발견되면 action2을 호출합니다.

+0

답변 해 주셔서 감사합니다. 그냥 빠른 설명. A와 B를 객체에 대한 포인터로 호출하는 것이 맞습니까? – user3207920

+0

또한, @ user3207920, A가 존재하는지 여부에 따라'B'가 조건부로 생성되도록하려면'action1()'앞에 추가로'if (A)'블록을 추가하십시오. –

0

이것은 입니다. 지난 번보다 훨씬 더 명확합니다. 그러면 솔루션은 간단 해집니다.

bool doAction2 = false; 
if (A) { 
    /*some code here. B is created here */ 
    doAction2 = (B != null); 
} 
action1(); 
if (doAction2) { 
    action2(); 
} 
관련 문제