我想打电话例如 TryDo.Do(MessageBox.Show(""), null);
我怎样才能做到这一点??
using System;
namespace TryCatchHandlers
{
public static class TryDo
{
public static CallResult Do(Delegate action, params object[] args)
{
try
{
return new CallResult (action.DynamicInvoke(args), action.Method.ReturnType, true);
}
catch
{
return new CallResult(null, null, false);
}
}
}
public class CallResult
{
public CallResult() { }
internal CallResult(object result, Type resultType, bool isSuccessful)
{
Result = result;
ResultType = resultType;
IsSuccessful = isSuccessful;
}
public object Result { get; private set; }
public Type ResultType { get; private set; }
public bool IsSuccessful { get; private set; }
}
}
Run Code Online (Sandbox Code Playgroud)
您的代码调用MessageBox.Show,然后尝试将结果传递给TryDo。
由于MessageBox.Show不返回 a Delegate,那将不起作用。
相反,您应该传递Show方法本身以及一个参数:
TryDo.Do(new Func<string, DialogResult>(MessageBox.Show), "");
Run Code Online (Sandbox Code Playgroud)
或者,您可以传递调用该函数的匿名方法:
TryDo.Do(new Action(() => MessageBox.Show("")));
Run Code Online (Sandbox Code Playgroud)
请注意,如果您使用Funcs 和Actions 而不是使用 aDelegate和调用的泛型重载,您的函数将执行得更快DynamicInvoke。
| 归档时间: |
|
| 查看次数: |
11826 次 |
| 最近记录: |