이 (더미) 코드를 사용하는 일반적인 방법이 있습니다 (예, 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 # 참조) ).null
0
int
'\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()
답변
-
객체가 있으면 typecast해야합니다.
return (T)(object)(employee);
-
null을 반환해야하는 경우
return default(T);
답변
다음은 사용할 수있는 두 가지 옵션입니다.
return default(T);
또는
where T : class, IThing
return null;
답변
다른 옵션은 이것을 선언의 끝에 추가하는 것입니다.
where T : class
where T: IList
그렇게하면 null을 반환 할 수 있습니다.