I have the following two methods that I am wondering if they are appropriate:
public bool IsGetter(MethodInfo method)
{
return method.IsSpecialName
You could try the following:
public bool IsGetter(MethodInfo method)
{
return method.DeclaringType.GetProperties().
Any(propInfo => propInfo.GetMethod == method);
}
You can optionally specify the binding flags for GetProperties
A property method has three extra characteristics, compared with a normal method:
get_
or set_
, while a normal method CAN start with those prefixes.MethodInfo.IsSpecialName
is set to true.System.Runtime.CompilerServices.CompilerGeneratedAttribute
.You could check on 1, combined with option 2 or 3. Since the prefixes are a standard, you should not really worry about checking on it.
The other method is to enumerate through all properties and match the methods, which will be much slower:
public bool IsGetter(MethodInfo method)
{
if (!method.IsSpecialName)
return false; // Easy and fast way out.
return method.DeclaringType
.GetProperties(BindingFlags.Instance | BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic)
.Any(p => p.GetGetMethod() == method);
}