调用具有特定参数的方法,而不需要类型拆箱
本文关键字:不需要 类型 方法 参数 调用 | 更新日期: 2023-09-27 17:52:34
现在我正在调用一个方法,它工作。下面是我正在做的一个示例:
string result = (string)GetType().InvokeMember(actionName, BindingFlags.InvokeMethod | BindingFlags.Instance | BindingFlags.NonPublic, null, this, new object[] { userId, roleId, rankId });
调用以下示例方法:
private string UserName(int userId, int roleId, int rankId)
{
...stuff...
return "JoeDoe";
}
我有多个方法,如"UserName"
,我在这里通过反射发现,但他们都有相同的签名。我能不能不要打开打字框?是否有一种方法让我传递{int,int,int}
作为参数在这种情况下,例如,而不是新的对象[]?
谢谢。
不—使用反射,您必须将值框起来以调用成员。然而,反射本身的成本相当高,因此在这种情况下,装箱操作并不(相对)昂贵。
如果可以,你可以创建一个委托,你可以直接调用委托:
Func<int, int, int, string> del = yourClassInstance.UserName;
// use three ints directly here...
string result = del(user, role, rank);
这仍然允许您为不同的方法分配各种委托,并调用它们,而不需要反射或装箱的开销。
我认为使用反射的性能开销比装箱/拆箱的性能开销要高得多。