泛型函数和值类型

本文关键字:类型 函数 泛型 | 更新日期: 2023-09-27 18:26:02

泛型函数是否能很好地与可为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);
}

当某个东西为空时,我用它来提供后备值,例如

var log = person.Return(p => p.log, emptylog)

因此,根据log是值类型还是引用类型,我是否需要Return()的专用版本来处理不带装箱的值类型,或者以上方法适用于所有情况?

编辑:我很好奇为什么这本书的作者http://pastebin.com/vdS1uNu1对类->结构、类->类等进行了专门化。

泛型函数和值类型

不,这不会框住值类型,但每次为TResult使用不同的值类型时,都会导致创建该方法的新本机实现,而所有引用类型都将共享相同的本机代码。这是非常很少有问题-这不像是每次调用的开销。正是"基于类型参数创建正确的本机代码"使其能够避免装箱。