将方法转换为委托?

3 .net delegates c#-4.0

我想打电话例如 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)

SLa*_*aks 5

您的代码调用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