操作<t>获取参数值

时间:2017-11-13 19:17:56

标签: c#

目标:传递行动&lt; T>要运行的方法。我们的想法是,如果方法使用T,那么我们可以指定我们将作为参数传递给方法的类型,而不是必须使用动态。

问题:我无法获取参数值,最好的方法是什么(最有可能使用反射)?

代码:

public static void RunVoidMethod<T>(Action<T> methodToRun)
{            
    try
    {
        // Below is a ParameterInfo, I want the parameter value for methodToRun
        var parameterValue = methodToRun.Method.GetParameters()[0];    
        methodToRun(parameterValue);
    }
    catch (Exception e)
    {
        throw;
    }    
}

最糟糕的情况是我可以添加一个可选参数,该参数也可以是T类型,但我希望尽可能避免这种情况。

2 个答案:

答案 0 :(得分:4)

也许你正在寻找这样的事情(我不是100%肯定,因为你的帖子没有真正包含一个问题,只是一个声明)。

public static void RunVoidMethod<T>(Action<T> methodToRun, T param)
{            
    try
    {
        methodToRun(param);
    }
    catch (Exception e)
    {
        throw;
    }    
}

答案 1 :(得分:1)

我并不是真的理解以这种方式使用委托的目的,但即使你这样做,你总是可以使用委托来调用接受参数的方法。

    static void Main(string[] args)
    {
        PrintTest(() => DelegateTest("Hello"));
    }

    public static void DelegateTest(string test)
    {
        Console.WriteLine(test);
        throw new ArgumentException();
    }
    public static void PrintTest(Action action)
    {
        try
        {
            action.Invoke();
        }
        catch (Exception w)
        {

            throw;
        }
    }

否则,MSDN上有一篇文章解释了如果在运行时之前不知道Type,那么如何调用委托:https://docs.microsoft.com/en-us/dotnet/framework/reflection-and-codedom/how-to-hook-up-a-delegate-using-reflection