Ars*_*yan 19 .net c# delegates
我的班上有两个带有这个签名的函数,
public static TResult Execute<TResult>(Func<T, TResult> remoteCall);
public static void Execute(Action<T> remoteCall)
Run Code Online (Sandbox Code Playgroud)
如何将第二种方法中的同一委托传递给第一种方法?使用Delegate参数创建方法不是一种方法,因为我丢失了一些异常信息非常
感谢!
Gre*_*ech 37
将其包装在Func<T, TResult>具有虚拟返回值的类型的委托中,例如
public static void Execute(Action<T> remoteCall)
{
Execute(t => { remoteCall(t); return true; });
}
Run Code Online (Sandbox Code Playgroud)
你要求字面意思是将不提供结果的东西传递给需要它的函数.
这是荒谬的.
你可以很容易地转换表的任何功能Action<T>来Func<T,TResult>,如果你愿意提供一些结果值(隐或显式)
Func<T,TResult> MakeDefault<T,TResult>(Action<T> action)
{
return t => { action(t); return default(TResult);};
}
Run Code Online (Sandbox Code Playgroud)
要么
Func<T,TResult> MakeFixed<T,TResult>(Action<T> action, TResult result)
{
return t => { action(t); return result; };
}
Run Code Online (Sandbox Code Playgroud)