Не работают ли общие функции с нулевыми типами значений, или они не за кадром?Общие функции и типы значений
Например, у меня есть вспомогательные функции вроде этого:
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);
}
, который я использую, чтобы предложить резервное значение, когда что-то имеет нулевое значение, например
var log = person.Return(p => p.log, emptylog)
Поэтому в зависимости от того, log
является значение или ссылочный тип, нужна ли мне специальная версия Return()
для обработки типов значений без бокса или это хорошо для всех случаев?
EDIT: Я любопытно, почему автор этой 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? default (TResult): lambda (ввод); \t \t} 'Кажется, что он работает при возврате типов значений ref, value или nullable. Так что в специальных реализациях нет смысла? Мне просто интересно, почему он беспокоился! Спасибо –
user826840