我正在尝试将一个Func<TResponse, T1, T2>
传递给这个方法。但是,我一直收到"method()“的语法错误。它说它需要两个有意义的参数,但是我怎么把它传递给这个方法呢?我已经将他们分别指定为T1和T2。
我怎么才能让它也返回TResponse呢?
我调用它的方式(我想用来调用方法的函数)。
_service.Count(fileDate (DateTime), cycle int));
我在这里做错了什么?
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;
}
}
发布于 2018-07-31 08:10:50
我猜你真的想要这个...
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;
}
}
你会用下面的方式调用它
var response = ExecuteAndLog(someGuid, someName, () => _service.Count(fileDate, cycle));
这样,您只需要一个ExecuteAndLog原型。如果将输入包括在Func
中(就像您在示例中所做的那样),则必须传递参数,并且每个可能的服务调用签名都需要不同版本的ExecuteAndLog。
注意:无论何时以这种方式使用lambda表达式,都要小心closures。
发布于 2018-07-31 07:55:14
如果method
需要接收两个参数,您需要传递它们:
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;
}
}
https://stackoverflow.com/questions/51603693
复制相似问题