1 回答
TA贡献1824条经验 获得超6个赞
只需使用与的示例相同的方案即可SafetyExecuteFunction<T>(Func<T> func)。
您需要注意的一件事是,您需要为out参数使用一个临时的局部变量。
private TResult SafetyExecuteFunctionWithOut<T1, T2, TResult>(FuncWithOut<T1, T2, TResult> func, T1 arg1, out T2 arg2)
{
TResult result = default(TResult);
T2 arg2Result = default(T2); // Need to use a temporary local variable here
SafetyExecuteMethod(() => result = func(arg1, out arg2Result));
arg2 = arg2Result; // And then assign it to the actual parameter after calling the delegate.
return result;
}
调用该函数的确像这样工作:
public bool CanUpdateUser(string userName, out string errorMessage)
{
bool result = SafetyExecuteFunctionWithOut<string, string, bool>(_innerSession.CanUpdateUser, userName, out errorMessage);
return result;
}
请注意,您必须将其_innerSession.CanUpdateUser作为参数传递给,SafetyExecuteFunctionWithOut而不是使用lambda表达式。
使用幼稚的尝试:
private TResult SafetyExecuteFunctionWithOut<T1, T2, TResult>(FuncWithOut<T1, T2, TResult> func, T1 arg1, out T2 arg2)
{
TResult result = default(TResult);
SafetyExecuteMethod(() => result = func(arg1, out arg2));
return result;
}
创建错误消息:
CS1628无法在匿名方法,lambda表达式或查询表达式中使用ref或out参数“ arg2”
此答案中说明了为什么不允许您这样做。
- 1 回答
- 0 关注
- 181 浏览
添加回答
举报