제네릭 함수는 nullable 값 형식과 잘 작동합니까? 아니면 뒤에 숨겨져 있습니까?일반 함수 및 값 형식
예를 들어이 같은 도우미 함수가 있습니다
이var log = person.Return(p => p.log, emptylog)
그래서 여부 log
에 따라 값이 예를 들어 내가 뭔가가 null의 경우 대체 값을 제공하는 데 사용
public static TResult Return<TInput, TResult>(this TInput o, Func<TInput, TResult> evaluator, TResult failureValue)
where TInput : class
{
if (o == null) return failureValue;
return evaluator(o);
}
, 또는 참조 유형을 사용하는 경우 복싱없이 값 유형을 처리하기 위해 Return()
의 특수화 된 버전이 필요합니까 아니면 모든 경우에 위의 결과가 좋을까요?
편집 : 나는이 http://pastebin.com/vdS1uNu1의 저자는 클래스에 대한 전문화가 왜 궁금 해요 - 그 상자 값 유형하지 않습니다,
감사합니다. 그렇다면이 코드는 왜 value/ref 유형에 대한 특수화 된 구현을 제공합니까? 제약되지 않은 TResult는 그냥 작동합니까? http://pastebin.com/vdS1uNu1 – user826840
@ user826840 : 아니요, 그 중 일부 메소드는'TResult? '를 사용하기 때문에 - TResult가 null이 아닌 값 유형으로 제한 될 때만 유효합니다. –
그러나 나는 할 경우'공공 정적 TResult MYTEST (이 TInput 입력, Func을 람다) \t \t { \t \t \t 반환 입력 == 널 (null)을? 기본값 (TResult) : 람다 (입력); \t \t} 'ref, value 또는 nullable 값 유형을 반환 할 때 작동하는 것으로 보입니다. 따라서 특별한 구현에는 전혀 요점이 없습니까? 나는 왜 그가 귀찮게했는지 궁금하다. Thanks –
user826840