调用具有特定参数的方法,而不需要类型拆箱

本文关键字:不需要 类型 方法 参数 调用 | 更新日期: 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);

这仍然允许您为不同的方法分配各种委托,并调用它们,而不需要反射或装箱的开销。

我认为使用反射的性能开销比装箱/拆箱的性能开销要高得多。