【发布时间】:2012-03-18 19:01:42
【问题描述】:
想象一个具有以下签名的方法:
public void ExampleMethod(string id, object data,
ref object A, ref object B, ref object C)
{
//...
}
data 中的值需要分配给 A、B、C 或什么都不分配,具体取决于 id 的值。简而言之,如果id == "A" 那么A = data;
问题是这个方法的主体是由人输入的,但签名是在运行时生成的。因此,不可能对逻辑进行硬编码,因为在设计时不知道会有多少 ref 参数以及它们被称为什么。这段代码可以插入到任意数量的方法中,每个方法都可能具有不同的签名,并且它必须在每个方法中都有效。
我知道如何获取当前方法一的所有参数,但我不知道如何为这些参数之一赋值。我正在寻找类似以下内容:
public void ExampleMethod(string id, object data,
ref object A, ???????, ref object Z)
{
MethodBase method = MethodBase.GetCurrentMethod();
foreach (ParameterInfo parameter in method.GetParameters())
{
if (id == parameter.Name)
{
// Problem: assign data to parameter.
return;
}
}
}
【问题讨论】:
-
会生成函数签名还是修复?
-
不清楚你的意思 - 为什么你不控制方法体?为什么不能只在方法体中做正确的事?如果您可以在此处提供更多上下文,听起来它真的会有所帮助。 (老实说,这也是一个非常奇怪的设计......)
-
@Henk,签名是在运行时生成的,所以在设计时不知道。我在帖子中添加了一些额外的信息。
-
@Jon,我控制着方法体。我无法控制方法签名。
-
@David 但您肯定可以检测签名,并相应地编写方法吗?场景非常不清楚......
标签: c# .net reflection methodbase parameterinfo