2016-09-05 2 views
1

다음 코드를 사용하여 위의 오류가 발생합니다. 나는 확실히 초심자 코더이다 그래서 아마 간단한 무언가. 나는 그것이 (a2dCollider)와 관련이 있다고 생각한다. 이 문이 작동하려면 충돌자가 존재하는지 확인해야합니다.모든 코드 경로가 값을 반환하지 않습니다. C# '

 private bool CheckIndex(int cIndex, bool a2DCollider) 
    { 
     if (a2DCollider) 
     { 
      if (floatingObjects2D.Count <= cIndex) 
      { 
       return true; 
      } 
      if (floatingObjects2D[cIndex] == null) 
      { 
       floatingObjects2D.RemoveAt(cIndex); 
       return true; 
      } 
     } 
     else 
     { 
      if (floatingObjects3D.Count <= cIndex) 
       return true; 
      if (floatingObjects3D[cIndex] == null) 
      { 
       floatingObjects3D.RemoveAt(cIndex); 
       return true; 
      } 
     } 


    } 
+1

가 무엇을 반환해야합니까? –

+1

당신은 단지 진실만을 돌려주기 때문에, 다른 모든 경우에 거짓을 반환 할 의도가 있습니까? – harold

답변

2

문제는 if-else 블록의 이중 if -statements 함께.

a2DCollidertrue인데 두 개의 내부 조건이 거짓이면 함수는 아무 것도 반환하지 않습니다. a2DColliderfalse하지만이 내부 if -statements 아무도 true을하지 않는 경우

또한, 함수는 아무것도 반환하지 않습니다. 로하지 않는 것 때문에

private bool CheckIndex(int cIndex, bool a2DCollider) 
{ 
    if (a2DCollider) 
    { 
     if (floatingObjects2D.Count <= cIndex) 
     { 
      return true; 
     } 
     if (floatingObjects2D[cIndex] == null) 
     { 
      floatingObjects2D.RemoveAt(cIndex); 
      return true; 
     } 
    } 
    else 
    { 
     if (floatingObjects3D.Count <= cIndex) 
      return true; 
     if (floatingObjects3D[cIndex] == null) 
     { 
      floatingObjects3D.RemoveAt(cIndex); 
      return true; 
     } 
    } 
    return false; 
} 

을 아니면 그냥 사방 true를 반환하는 것 때문에 함수 void 기능을하고 :

당신은 쉽게처럼 if-else 아래 return false 줄을 추가하여이 문제를 해결할 수 아무것도 반환 값을 사용하십시오. 이와 같이 :

private void CheckIndex(int cIndex, bool a2DCollider) 
{ 
    if (a2DCollider && floatingObjects2D[cIndex] == null) 
    { 
     floatingObjects2D.RemoveAt(cIndex); 
    }   
    else if (floatingObjects3D[cIndex] == null) 
    {    
     floatingObjects3D.RemoveAt(cIndex); 
    } 
} 
1

당신은 일을 너무 복잡하게 만들고, 단지 코드의 끝으로 돌아갑니다.

private bool CheckIndex(int cIndex, bool a2DCollider) 
{ 
    if (a2DCollider && floatingObjects2D[cIndex] == null) 
     floatingObjects2D.RemoveAt(cIndex);   
    else if (floatingObjects3D[cIndex] == null)    
     floatingObjects3D.RemoveAt(cIndex)    
    return true; 
} 
0

'floatingObjects2D [cIndex]! = null'이면 어떻게됩니까? 다른 사용자가 필요합니다

1

if - else 문에서 실행하는 동안 함수에 제공하는 매개 변수에 대한 가능한 모든 시나리오를 다루지 않았습니다. 다른 값에 선언하여, 이전에 반환되지 않은 경우 기본적으로 false 또는 true을 반환 할 수 있습니다, 또는

private bool CheckIndex(int cIndex, bool a2DCollider) 
    { 
     if (a2DCollider) 
     { 
      if (floatingObjects2D.Count <= cIndex) 
       return true; 
      if (floatingObjects2D[cIndex] == null) 
      { 
       floatingObjects2D.RemoveAt(cIndex); 
       return true; 
      } 
      else 
       // return something 
     } 
     else 
     { 
      if (floatingObjects3D.Count <= cIndex) 
       return true; 
      if (floatingObjects3D[cIndex] == null) 
      { 
       floatingObjects3D.RemoveAt(cIndex); 
       return true; 
      } 
      else 
       // return something 
     } 
    } 

:이 조건이 else을 사용하여, 충족되지 않은 경우 수행 할 작업에 프로그램을 알려줄 필요 항상 함수의 끝, 함수는 출력 (및 반환 값)을 제공 할 것입니다 있는지 확인합니다 :`a2DCollider`는`TRUE '와`floatingObjects2D.Count> cIndex` 경우

private bool CheckIndex(int cIndex, bool a2DCollider) 
{ 
    if (a2DCollider) 
    { 
     ... 
    } 
    else 
    { 
     ... 
    } 
    return false; 
} 
+0

예 : o), 누군가 Unity 포럼의 마지막에 false를 넣으라고 말했고 완벽하게 작동했습니다. 모든 빠른 답변을 주셔서 감사합니다. – Brandon

관련 문제