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 # 참조) ).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을 반환 할 수 있습니다.
TheSoftwareJedi의 솔루션 작동
또한 몇 가지 값과 nullable 유형을 사용하여 보관할 수 있습니다.
static T? FindThing<T>(IList collection, int id) where T : struct, IThing
{
foreach T thing in collecion
{
if (thing.Id == id)
return thing;
}
return null;
}
오류의 추천 ... 그리고 중 하나를 사용자 가지고 default(T)
또는 new T
.
해당 경로로 이동하면 코드가 유효한지 확인하기 위해 코드에 비교를 추가해야합니다.
그렇지 않으면 "match found"에 대한 출력 매개 변수를 고려하십시오.
Nullable Enum 반환 값에 대한 실제 예는 다음과 같습니다.
public static TEnum? ParseOptional<TEnum>(this string value) where TEnum : struct
{
return value == null ? (TEnum?)null : (TEnum) Enum.Parse(typeof(TEnum), value);
}
위에 제시된 2 가지 답변에 대한 다른 대안. 반환 유형을로 변경 object
하면을 반환 할 수 null
있으며 동시에 null이 아닌 반환을 캐스팅 할 수 있습니다 .
static object FindThing<T>(IList collection, int id)
{
foreach T thing in collecion
{
if (thing.Id == id)
return (T) thing;
}
return null; // allowed now
}
참고 URL : https://stackoverflow.com/questions/302096/how-can-i-return-null-from-a-generic-method-in-c
'development' 카테고리의 다른 글
파이썬에서 문자열 비교 : is vs. == [duplicate] (0) | 2020.02.11 |
---|---|
쿼리 문자열의 가능한 최대 길이는 얼마입니까? (0) | 2020.02.11 |
CSS를 사용하여 div를 세로로 스크롤 가능하게 만들기 (0) | 2020.02.11 |
요청 페이로드 대신 데이터를 양식 데이터로 게시하려면 어떻게해야합니까? (0) | 2020.02.11 |
그런트 시계 오류-대기 중… 치명적인 오류 : ENOSPC 시계 (0) | 2020.02.11 |