首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >无法在方法内传递函数参数

无法在方法内传递函数参数
EN

Stack Overflow用户
提问于 2018-07-31 07:52:09
回答 2查看 44关注 0票数 -3

我正在尝试将一个Func<TResponse, T1, T2>传递给这个方法。但是,我一直收到"method()“的语法错误。它说它需要两个有意义的参数,但是我怎么把它传递给这个方法呢?我已经将他们分别指定为T1和T2。

我怎么才能让它也返回TResponse呢?

我调用它的方式(我想用来调用方法的函数)。

代码语言:javascript
复制
_service.Count(fileDate (DateTime), cycle int));

我在这里做错了什么?

代码语言:javascript
复制
public TResponse ExecuteAndLog<T1, T2,TResponse>(Guid id, string Name, Func<T1, T2, TResponse> method) where TResponse : class
{
    try
    {
        Log(id, Name);
        TResponse x = method();
        Log(id, Name);
    }
    catch (Exception ex)
    {
        Log(id, Name);
        throw;
    }
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-07-31 08:10:50

我猜你真的想要这个...

代码语言:javascript
复制
public TResponse ExecuteAndLog<TResponse>(Guid id, string Name, Func<TResponse> method) where TResponse : class
{
    try
    {
        Log(id, Name);
        TResponse x = method();
        Log(id, Name);
    }
    catch (Exception ex)
    {
        Log(id, Name);
        throw;
    }
}

你会用下面的方式调用它

代码语言:javascript
复制
var response = ExecuteAndLog(someGuid, someName, () => _service.Count(fileDate, cycle));

这样,您只需要一个ExecuteAndLog原型。如果将输入包括在Func中(就像您在示例中所做的那样),则必须传递参数,并且每个可能的服务调用签名都需要不同版本的ExecuteAndLog。

注意:无论何时以这种方式使用lambda表达式,都要小心closures

票数 3
EN

Stack Overflow用户

发布于 2018-07-31 07:55:14

如果method需要接收两个参数,您需要传递它们:

代码语言:javascript
复制
public TResponse ExecuteAndLog<T1, T2,TResponse>(Guid id, string Name, Func<T1, T2, TResponse> method, T1 arg1, T2 arg2) where TResponse : class
{
    try
    {
        Log(id, Name);
        TResponse x = method(arg1, arg2);
        Log(id, Name);

        return x;
    }
    catch (Exception ex)
    {
        Log(id, Name);
        throw;
    }
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51603693

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档