使用命名参数动态调用方法

问题描述 投票:3回答:3

我们目前正在使用.NET 3.5,并且我们的部分应用程序使用动态调用(使用MethodBase.Invoke

我想知道是否可以在动态调用中混入命名参数(在.NET 4中),以执行类似以下操作:

// Dictionary that holds parameter name --> object mapping
var parameters = new Dictionary<string, object>();

// Add parameters ....

// Invoke where each parameter will match the one from the method signature.
methodInfo.Invoke(obj, parameters);

是否有任何API允许开箱即用?如果没有,是否有可能开发一些解决方案来执行此操作?

编辑:

重新思考此问题,这听起来类似于编译器实际上可能实际上需要根据参数列表来匹配方法调用的方式。也许有一些Compiler API(或新的Roslyn项目)可以轻松做到这一点? (我自己编写的代码可能很容易出错)。

c# .net reflection named-parameters roslyn
3个回答
16
投票

您可以使用如下代码:


1
投票

您可以在本文How can you get the names of method parameters?的帮助下获取您的参数名称,然后可以按照此处Reflection: How to Invoke Method with parameters的说明对其进行重新排序以调用它们。>


1
投票

使用.net4,我有一个开源框架ImpromptuInterface(在nuget中找到),可以轻松地将DLR api用于late invocation including named/optional parameters

© www.soinside.com 2019 - 2024. All rights reserved.