通用函数和值类型

时间:2014-10-09 15:25:38

标签: c# generics

泛型函数是否适用于可以为空的值类型,或者它们是否在幕后填充?

例如,我有一个这样的辅助函数:

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;上课等。

1 个答案:

答案 0 :(得分:3)

不,这不会是框值类型 - 但是每次为{{使用不同的值类型时,导致创建方法的新本机实现(在JIT时) 1}},而所有引用类型将共享相同的本机代码。那个非常很少是一个问题 - 它不像是一个每次调用的开销。它是“基于类型参数创建正确的本机代码”,允许它避免装箱。