我还没有找到做这样的事情的解决方案。
说我有一个地址类
public class Address : IAddress{...}
我有一个AddressManager类
public class AddressManager{
public void SaveAddress(Address adress)
{...}
}
我稍后在MethodInfo对象中有这个 SaveAddress()方法信息。并且可以根据此信息创建一个Action对象。像这样:
Action<Address> action = (Action<Address>)Delegate.CreateDelegate(typeof(Action<Address>), instance, methodInfo);
然后我可以像这样执行它:
action(parameter);
这很好,但我的问题是我希望地址是“generic”所以我可以发送任何实现 IAddress
我喜欢做这样的事情
Action<IAddress> action = (Action<IAddress>)Delegate.CreateDelegate(typeof(Action<IAddress>), instance, methodInfo);
action(parameter);
但这给了我一个问题,因为它与methodSignature不匹配,因为它将地址视为参数。
或者我想这样做(我认为不可能以任何方式)
Action<parameter.GetType()> action = (Action<parameter.GetType()>)Delegate.CreateDelegate(typeof(Action<parameter.GetType()>), instance, methodInfo);
action(parameter);
有没有什么好方法可以解决这个问题?