[C#] C # 뭔가 값이 있는지 여부와 0보다 큰 값이 있는지 확인해야합니까?


Answers

코드가 중복 될 가능성이 있습니다.

내가 int? 이면 int? 그때:

if (i.HasValue && i.Value > 0)

다음과 같습니다.

if (i > 0)

MSDN에서 :

Nullable 형식과 비교를 수행 할 때 nullable 형식 중 하나의 값이 null이고 다른 값이 아닌 경우! = (같지 않음)을 제외한 모든 비교는 false로 평가됩니다. 특정 비교가 false를 반환하기 때문에 반대의 경우가 true를 반환한다고 가정하지 않는 것이 중요합니다. 다음 예제에서 10은 null보다 크지 않고 작거나 같지 않습니다. num1! = num2만이 참으로 평가됩니다.

Question

프로젝트와 코더에 대한 작업은 수표에서 많은 작업을 수행합니다. 먼저 null 허용 int에 값이 있는지 검사 한 다음 0보다 큰지 검사합니다. 왜? 하나의 수표가 0보다 큰 경우 2 개의 수표를 만드는 것이 왜 충분해야합니까? nulls가 0보다 크지 않기 때문에 ... 중복인가?

이것이 내가 여기 묻는 것이 었는지는 확실하지 않지만 구글 검색에서 어떻게 단어를 쓰는지 모르겠다. 어쩌면 나는이 프로그래머가하는 것을 모를 것이다.




Null 검사는 일반적으로 예외를 방지하거나 기본값 (.NET 4 이전)을 설정하기 위해 수행됩니다. 상황에 따라 0을 확인하는 것이 비즈니스 로직 선택의 대상이 될 것입니다.




프로그래머는 참조 유형을 역 참조하기 전에 다음 유형의 점검에 익숙합니다. Nullable HasValue 가 null 체크와 개념이 비슷하다는 점을 감안할 때 nullable 유형이 중복 되어도 'stuck'패턴을 추측합니다.

if ((myObject != null)  && (myObject.SomeValue > 0))

...




변수의 값이 그 맥락에서 다른 의미를 가질 수도 있습니다.

int? someNumber = null; //might mean "there is no value"
int? someOtherNumber = 0; //might mean "the user has selected: 0"



다음과 같은:

class Program {
    static void Main(string[] args) {
        int? i = null;
        if (i > 0) { Console.WriteLine(">0");
        } else {     Console.WriteLine("not >0");
        }
        if (i < 0) { Console.WriteLine("<0");
        } else {     Console.WriteLine("not <0");
        }
        if (i == 0) {Console.WriteLine("==0");
        } else {     Console.WriteLine("not ==0");
        }
        Console.ReadKey();
    }
}

출력 할 것이다.

not >0
not <0
not ==0

예외를 던지지 않고. 이 경우 null / HasValue 검사는 중복됩니다. 하나의 작은 차이가 있습니다. 다음과 같은:

(i.HasValue && (i.Value == 0))

약 2 배 빠릅니다.

(i == 0)

둘 다 너무 빠르지 만 null 인 경우 중요한 차이가 아닙니다. 내가 가치가있을 때, 두 비교는 거의 같은 시간이 걸린다.