2
泛型函数可以使用可为空的值类型,还是在幕后操作?泛型函数和值类型
比如我有一个辅助功能是这样的:
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()
来处理值类型没有装箱,或者是上述所有情况下的好?
编辑:我很好奇,为什么这http://pastebin.com/vdS1uNu1的作者有类特 - >结构,类 - >类等
谢谢。那么为什么这个代码为value/ref类型提供了专门的实现呢?难道一个不受约束的TResult只是起作用吗? http://pastebin.com/vdS1uNu1 – user826840 2014-10-09 15:33:37
@ user826840:不,因为其中一些方法使用TResult? - 这只有在TResult被限制为非空值类型时才有效。 – 2014-10-09 15:38:34
但是,如果我做的:'公共静态TResult MyTest的(此TInput输入,Func键拉姆达) \t \t { \t \t \t返回输入== NULL?默认(TResult):lambda(输入); \t \t} '它似乎工作时返回ref,值或可为空值类型。所以在特殊实现中毫无意义?我只是好奇他为什么打扰!谢谢 –
user826840
2014-10-09 15:46:36