如何确定MethodInfo是否适合不同的委派类型?
bool IsMyDelegate(MethodInfo method);编辑:我得到了一个MethodInfo对象,我想知道它是否适合委托接口。除了显而易见的
private bool IsValidationDelegate(MethodInfo method)
{
var result = false;
var parameters = method.GetParameters();
if (parameters.Length == 2 &&
parameters[0].ParameterType == typeof(MyObject1) &&
parameters[1].ParameterType == typeof(MyObject2) &&
method.ReturnType == typeof(bool))
{
result = true;
}
else
{
m_Log.Error("Validator:IsValidationDelegate", "Method [...] is not a ValidationDelegate.");
}
return result;
}发布于 2010-02-08 19:17:49
如果method是静态方法:
bool isMyDelegate =
(Delegate.CreateDelegate(typeof(MyDelegate), method, false) != null);如果method是一个实例方法:
bool isMyDelegate =
(Delegate.CreateDelegate(typeof(MyDelegate), someObj, method, false) != null)(不幸的是,在这种情况下,您需要一个实例,因为Delegate.CreateDelegate将尝试绑定一个委托实例,即使在这种情况下,我们只关心它是否可以创建委托。)
在这两种情况下,技巧基本上都是要求.NET从MethodInfo创建所需类型的委托,但如果方法具有错误的签名,则返回null,而不是抛出异常。然后,针对null的测试将告诉我们委托是否具有正确的签名。
请注意,因为这实际上是尝试创建委托,所以它还将为您处理所有委托方差规则(例如,当方法返回类型兼容但与委托返回类型不完全相同时)。
https://stackoverflow.com/questions/2221085
复制相似问题