1

在将对象转换为类型后,我将如何调用对象的方法调用?我有一个 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();
    }  

有什么办法可以做到这一点?

谢谢。

4

4 回答 4

1

代替

return v.someMethod();

您必须通过反射调用该方法

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

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

请注意,这method.Invoke()将返回一个对象,因此您必须将其转换为所需的类型(如果需要)。

于 2013-05-24T13:19:28.787 回答
1

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

dynamic v = client.Value;
v.SomeMethod();
于 2013-05-24T13:22:15.817 回答
0

最快的方法,当你不批量做某事时,使用Type.InvokeMember正确的方法BindingFlags

于 2013-05-24T13:19:17.220 回答
0

如果 someMethod 在 中相同v.someMethod(),则您的键可以实现一个接口 - 因此您可以取消Convert.ChangeType逻辑。

于 2013-05-24T13:22:07.307 回答