泛型函数是否适用于可以为空的值类型,或者它们是否在幕后填充?
例如,我有一个这样的辅助函数:
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的作者有专门的课程 - &gt; struct,class - &gt;上课等。
答案 0 :(得分:3)
不,这不会是框值类型 - 但是每次为{{使用不同的值类型时,将导致创建方法的新本机实现(在JIT时) 1}},而所有引用类型将共享相同的本机代码。那个非常很少是一个问题 - 它不像是一个每次调用的开销。它是“基于类型参数创建正确的本机代码”,允许它避免装箱。