2013-07-24 1 views
0

두 변수를 사용하는 가장 좋은 방법은 매우 간단합니다. 본질적으로 나는 여러 가지 ifs 내에서 얻고 싶은 enum과 int를 가지고있다. 나는 그들이 밖에서 선언해야하는 경우 나 내부 - 다음 예를 고려하십시오두 개의 매개 변수를 선언하는 가장 좋은 방법은 #입니다.

e.g.a :

public void test() { 
    EnumName? value = null; 
    int distance = 0; 

    if(anotherValue == something) { 
     distance = 10; 
     value = getValue(distance); 
    } 
    else if(anotherValue == somethingElse) { 
     distance = 20; 
     value = getValue(distance); 
    } 


    if (value == theValueWeWant){ 
     //Do something 
} 

또는

e.g.2

public void test() { 

    if(anotherValue == something) { 
     int distance = 10; 
     EnumType value = getValue(distance); 
     if (value == theValueWeWant){ 
      //Do something 
    } 
    else if(anotherValue == somethingElse) { 
     int distance = 20; 
     EnumType value = getValue(distance); 
     if (value == theValueWeWant){ 
      //Do something 
    } 

} 

내가 가장 적합한 단지 궁금

? 또는 더 좋은 방법이 있다면?

+1

을 첫 번째 예는 두 번째 동안 if 문 외부의 변수를 필요 :

거리가 오직 getValue (거리)에 사용하는 경우 예를 들어, 당신은 완전히 제거하기 수 변수는 if 문 범위 밖에서는 필요하지 않습니다. – Zaki

답변

0

나중에 사용하려면 g를 두 번째 방법으로 사용하십시오. 이러한 변수는 범위를 벗어나면 즉시 사라집니다.

나중에 사용하지 않으려는 경우에도 코드 반복을 피하기 위해 if 앞에해야한다고 선언하십시오.

0

이 질문은 순전히 스타일의 문제이며, 따라서 더 올바른 대답 만 의견

는 C# 가장 좋은 방법은 그들이 사용 범위에 변수를 선언 일반적으로

이 없습니다. 이것은 두 번째 예제를 답으로 가리킬 것입니다. 유형과 이름은 동일하지만 여러 용도를 나타내며 작성된 블록에 제약되어야합니다.

3

순수하게 유지 관리면에서 코드를 복제하지 않으므로 첫 번째 코드 블록이 더 좋습니다 (두 경우 모두 "무언가를 수행하십시오"가 동일하다고 가정).

성능 측면에서 차이는 무시할 수 있습니다. 두 번째 경우는 컴파일 된 일리노이에서 두 배 많은 현지인을 생성하지만 JIT는 사용량이 겹치지 않고 최적화되지 않는 것을 알아야합니다. 두 번째 경우는 동일한 코드를 두 번 방출하게됩니다 (if (value == theValueWeWant) { ...). 그러나 이로 인해 심각한 성능 저하가 발생하지 않아야합니다.

:

(. 두 번째 예 의 두 측면이 아주 약간 더 큰 것으로 컴파일 된 어셈블리가 발생할 수 있지만, 더 IL 항상 나쁜 성능을 의미하지는 않습니다)

1

두 예제는 두 개의 서로 다른 일을 버전 1은 원하는 값을 얻은 경우 동일한 코드를 실행하며 버전 2는 원하는 값을 얻더라도 다른 코드를 실행할 수 있습니다.

가능한 많은 (마이크로) 최적화가 있습니다. 모두가 다른 시나리오입니다

/*Waring, micro-optimization!*/ 
public void test() { 

     EnumType value = getValue((anotherValue == something) ? 10 : (anotherValue == somethingElse) ? 20 : 0); 
     if (value == theValueWeWant){ 
    //Do something 
     } 
} 
관련 문제