首页 文章

Func <TResp>和Func <TResp,T> [暂停]的最佳实践

提问于
浏览
-1

让我们假设我有两个函数,如:

public T Foo<T>(Func<T> func){
    return func();
}

public TResult Foo<T, TResult>(Func<T, TResult> func, T param){
    return func(param);
}

我有以下代码来执行:

someObj.someMethod(someParam);

哪种方法更可取,有什么区别?

var foo = Foo(() => someObj.someMethod(someParam));

要么

var foo = Foo(someObj.someMethod, someParam);

2 回答

  • 1

    由于没有关于为什么你想使用一个而不是另一个的背景,我将讨论差异 .

    从闭合的角度来看,它将以相同的方式运行(除非第二种方法执行转换或捕获传递的值) . 变量不是捕获因此使用此值执行方法(假设它是可变的)可能会产生不同的结果 . 另一个区别是你创建另一个方法而不是传递现有的方法引用 .

    通常,如果您希望以某种方式使用传递值,则更喜欢使用第二种方法 . 即你有一个try / catch包装器,所以你想在失败的情况下打印值 . 否则就去第一个 .

  • 0

    第一种方法似乎更为可取 .

    Foo(() => someObj.someMethod(someParam));
    

    因为someParam与someFethod相关的不仅仅是Foo .

相关问题