[C#] C #의 일반 메소드에서 NULL을 어떻게 반환 할 수 있습니까?

이 (더미) 코드를 사용하는 일반적인 방법이 있습니다 (예, IList에 술어가 있다는 것을 알고 있습니다.하지만 내 코드는 IList를 사용하지 않지만 다른 컬렉션을 사용합니다. 어쨌든 이것은 질문과 관련이 없습니다 …)

static T FindThing<T>(IList collection, int id) where T : IThing, new()
{
    foreach T thing in collecion
    {
        if (thing.Id == id)
            return thing;
    }
    return null;  // ERROR: Cannot convert null to type parameter 'T' because it could be a value type. Consider using 'default(T)' instead.
}

이것은 나에게 빌드 오류를 준다

“값 유형일 수 있으므로 널을 유형 매개 변수 ‘T’로 변환 할 수 없습니다. 대신 ‘default (T)’를 사용하는 것이 좋습니다.”

이 오류를 피할 수 있습니까?



답변

두 가지 옵션 :

  • 리턴 은 T가 참조 유형 (또는 널 입력 가능 값 유형), for , for 등인 경우 리턴 함 default(T)을 의미합니다 ( 기본값 테이블 (C # 참조) ).null0int'\0'char
  • T를 where T : class제약 조건 이있는 참조 유형으로 제한 한 다음 null정상적으로 반환

답변

return default(T);


답변

제약 조건을 조정할 수 있습니다.

where T : class

그런 다음 null 반환이 허용됩니다.


답변

클래스 제약 조건을 일반 형식의 첫 번째 제약 조건으로 추가하십시오.

static T FindThing<T>(IList collection, int id) where T : class, IThing, new()


답변

  1. 객체가 있으면 typecast해야합니다.

    return (T)(object)(employee);
  2. null을 반환해야하는 경우

    return default(T);

답변

다음은 사용할 수있는 두 가지 옵션입니다.

return default(T);

또는

where T : class, IThing
 return null;


답변

다른 옵션은 이것을 선언의 끝에 추가하는 것입니다.

    where T : class
    where T: IList

그렇게하면 null을 반환 할 수 있습니다.