는 C#

2012-01-10 7 views
1

내가 x는 널 (NULL) INT는 C#

영어입니다 C#으로 다음과 같은 시험을 표현하는 더 간결한 방법을 찾고 있어요와 가능한 한 간결 되려고 : x는 값 및 Y> X가있는 경우 다음 더 간결하게 뭔가를

C# .NET을 수행

if(x.HasValue && y > x) 

유사하게, 나는 널 (NULL) 부울 값을 기본값으로 원한다면 (x)를 false로 내가 작성할 수 있습니다

if(x ?? false) 
{ 
    //x is true 
} 
else 
{ 
    //x is either null or false 
} 

대신 : 분명히 말할 것도없고, 그대로

if(x.HasValue() && x == true) 

많은 감사

+6

해제 된 비교 연산자는 피연산자 중 하나가 null이면 false를 반환하는 것으로 정의됩니다.피연산자에 값이 있는지 확인하지 않아도됩니다. 자세한 내용은 C# 4 사양의 7.3.7 절을 참조하십시오. –

+1

"if (x.HasValue && y> x)"는 아마도 간결해야합니다. 특정 시점에서 더 단순화는 실용적이지 않으며 경우에 따라 코드를 읽기 쉽게 만들 수 있습니다. –

답변

3

if(x.HasValue && y > x)은 매우 간결하다. 해결 방법은 다소 인위적입니다. 고려 : 태평양 표준시 노트로

if ((x ?? (y + 1)) < y) 

, 당신은 실제로 여기에 HasValue 전화가 필요하지 않습니다. 하지만 명확성을 위해 그럼에도 불구하고 그것을 포함시키는 것이 좋습니다.

11

y > x으로 충분해야합니다.

0 >= (int?)null // false 
0 <= (int?)null // false 

은 (OTOH, 나는 뭔가가 널 (null) "보다 더 큰"이 될 것이라고 생각이 동작에 의해 물린되고있다. 이러한 경우에서 y > (x ?? 0) 또는 유용 할 수 있습니다 유사합니다.)에 벤 보이트의 코멘트에서

Using Nullable Types는 다음 nullable 형식 중 하나의 값이 null이고, 다른 하나는없는 경우

당신이 nullable 형식과 비교를 수행

모든 비교는 제외 false로 평가 = (! 같지 않음). 특정 비교가 false를 반환하기 때문에 반대의 경우가 true를 반환한다고 가정하지 않는 것이 중요합니다.

해피 코딩.

+4

[문서] (http://msdn.microsoft.com/en-us/library/2cf62fcy.aspx)의 중요한 부분은 다음과 같습니다. "nullable 형식과 비교할 때 nullable 형식 중 하나의 값 null이 아니고 다른 것이 아니라면, 모든 비교는'! ='(같지 않음)을 제외하고는 false로 평가됩니다. " –

+0

@BenVoigt 참고를 보내 주셔서 감사합니다. 답변을 반영하도록 업데이트했습니다. –

3

진술을 간결하게 만들 수있는 방법이있을 수 있지만 분명히 설명 할 것입니다. 사용법은 꽤 관용적이며 의도를 분명히합니다. nullable 불평등 연산자 (@ pst의 답처럼)의 동작에 의존하면 코드의 오해가 생길 수 있으며 변수가 nullable이라는 사실을 무시할 수 있습니다. 나는 네가 가진 것에 충실 할 것이다.

1

확장 방법을 사용할 수 있습니다.

public static class IntegerExtensions 
{ 
    public static bool IsLargerThan(this int? number, int numberToCompare) 
    { 
     return number.HasValue && number > numberToCompare; 
    } 
} 

... 

// Usage: 

int? val1 = 15; 
int val2 = 10; 

if (val1.IsLargerThan(val2)) 
{ 
    // Do Something 
} 
0

GetValueOrDefault() 방법을 사용해 보셨습니까?

x가 int? 인 경우 첫 번째 if 문을 if (x.GetValueOrDefault() > y)으로 다시 쓸 수 있습니다. x가 bool? 인 경우 간단히 if(x.GetValueOrDefault())으로 다시 쓸 수 있습니다.