How would I go about invoking a method call for an Object after casting it to a Type? I have a KeyValuePair which stores the type of the object and the object itself. I then want to cast this object to its key type and invoke a method of that class type.
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();
}
Any way to do this?
Thanks.
Quickest way, when you're not doing something in bulk, is using the
Type.InvokeMember
method with the rightBindingFlags
.If someMethod is going to be same in
v.someMethod()
, your keys could implement an interface - and hence you could do away with theConvert.ChangeType
logic.instead of
you have to call the method by reflection
Note that
method.Invoke()
will return an object, so you'll have to cast it to the desired type (if needed).The simplest approach is to use the
dynamic
keyword: