2009-03-15 4 views
47

KeyValuePair 메서드에 '선택적'매개 변수가 있습니다. 나는이 매개 변수에 대한 핵심 메서드에 null이 전달 과부하를 원하지만, KeyValuePair가 null의 경우 내가 확인하고자하는 핵심 방법에서, 나는 다음과 같은 오류 얻을 :개체를 null과 비교할 수없는 방법은 무엇입니까?

Operator '!=' cannot be applied to operands of type System.Collections.Generic.KeyValuePair<string,object>' and '<null>. 

를 어떻게 할 수 없다 객체가 null인지 검사 할 수 있습니까?

+0

이 오류를 보여주는 코드 샘플을 제공 할 수 있습니까? –

+2

참조 : http://stackoverflow.com/questions/1335419/how-can-i-make-sure-that-firstordefaultkeyvaluepair-has-returned-a-value –

답변

78

KeyValuePair<K,V>은 클래스가 아닌 구조체입니다. 그것은 일처럼 :

int i = 10; 
if (i != null) ... 

(그 때문에 이상한 널 (NULL) 변환 규칙에 대한 경고와 함께, 실제로 법적하지만 중요한 비트가 if 조건이 true 수 없을 것입니다..)

그것을하려면 "선택 사항"이면 다음과 같이 사용할 수 있습니다.

static void Foo(KeyValuePair<object,string>? pair) 
{ 
    if (pair != null) 
    { 
    } 
    // Other code 
} 

참고? in KeyValuePair<object,string>?

+1

감사합니다. 결코 구조체였습니다. 이런! – ProfK

+4

"(i! = null)"경고를 생성하지만 슬프게도 MSDN 지침에 따라 Equals/== /! =을 오버로드하는 사용자 정의 값 형식에 대한 경고가 없습니다. "struct Foo"를 구현할 때 매우 혼란스럽고 클라이언트는 someFoo에 값이 있는지 확인하는 합리적인 방법으로 "if (someFoo! = null)"을 기대합니다. :-p – yoyo

7

KeyValuePair는 구조 (값 형식)이므로 참조 형식에 대해서만 null을 비교할 수 있습니다.

아직 과부하를 작성하지 않으 셨습니다. KeyValuePair의 값으로서 null를 건네 주려고하면 (자) 실패합니다.

3

KeyValuePair < K, V >은 구조체이므로 어떠한 상황에서도 null이 될 수 없습니다. 참조 유형 만 null 일 수 있습니다.

잘못된 값을 잡으려고하면 키 및 값 멤버를 개별적으로 확인해야합니다.

-8

실제로 KeyValuePair.IsNull()을 사용하여 KeyValuePair가 설정되었는지 확인할 수 있습니다.

+0

어디서 KeyValuePair.IsNull()을 얻고 있습니까? 확장 방법은? – Mark

12

이 지정된 대답은 정확

"테스트 keyvaluepair null로"하기위한 곳 중 1 번째로 구글 결과이기 때문에 나는 그것의 나이에도 불구하고이 대답 합니다만, 완전히, 적어도 하나의 문제에 응답하지 않습니다 나는 내가 가지고있는 중이 었는데, KeyValuePair의 존재를 테스트하고 내가 기대하는대로 존재하지 않는다면 Dictionary의 다른 검사로 이동해야합니다. 컴파일러는 KeyValuePair<>?KeyValuePair.Value을 얻기에 질식, 그래서이 질문 + 답변에서 볼 수 있듯이 default(KeyValuePair<>)을 활용하는 것이 좋습니다 때문에 나를 위해 작동하지 않았다 위의 방법을 사용하여

. The default for KeyValuePair

관련 문제