投下变量类型和调用方法(Cast a variable to a Type and call Met

2019-10-18 04:25发布

我怎么会去它强制转换为类型后调用一个方法调用的对象? 我有一个存储对象和对象本身的类型KeyValuePair。 那么我想这个对象转换为它的密钥类型和调用该类类型的方法。

    KeyValuePair<Type, Object> client = myClients.Find(
        delegate(KeyValuePair<Type, Object> result)
        {
            return (result.Key == myClients[clientNumber].Key); // Match client of the same type
        }
    );

    if (client.Value != null)
    {
        // cast client.Value to type of client.Key, then invoke someMethod 
        client.Key.GetType() v = Convert.ChangeType(client.Value, client.Key.GetType());
        return v.someMethod();
    }  

没有办法做到这一点?

谢谢。

Answer 1:

代替

return v.someMethod();

你必须调用反射方法

var method = typeof(v).GetMethod("<methodName>",...);

return method.Invoke(v, new[]{<parameters of the method>});

需要注意的是method.Invoke()将返回一个对象,所以你必须将它转换为所需的类型(如果需要)。



Answer 2:

最简单的方法是使用dynamic关键字:

dynamic v = client.Value;
v.SomeMethod();


Answer 3:

最快的方法,如果你不这样做散装的东西,使用Type.InvokeMember用正确的方法BindingFlags



Answer 4:

如果是的someMethod要在同一v.someMethod()你的钥匙可以实现一个接口-因此你可以做掉与Convert.ChangeType逻辑。



文章来源: Cast a variable to a Type and call Methods