想象以下问题:
Open in New Window
有人知道如何调用DoSomething(...),而不会触发参数不匹配异常吗?
以防万一:我无法访问远程程序集。
非常感谢您:)
答案 0 :(得分:0)
如果由于某种原因通过反射获取类型,则可以继续使用它来获取所需的枚举值和调用方法:
var remoteType = typeof(Remote); //you remote type from assembly
// you will use var remoteType = assembly.DefinedTypes.First(t => t.GetName() == "R.Remote");
var method = remoteType.GetMethod("DoSomething"); // find needed method somehow
var instance = Activator.CreateInstance(remoteType); // creates instance via parameterless ctor
var remoteSomeType = remoteType.GetNestedType("SomeTypes"); // get Remote.SomeType
var a = remoteSomeType.GetField("A").GetValue(null); // Get Remote.SomeType.A enum value
method.Invoke(instance, new object[]{a, 3}); // call method
请注意,通常动态/反射比较慢,因此,如果您打算频繁调用此方法,则应考虑以某种方式“缓存”反射,例如,尝试使用expression trees进行编译。