Tip: how to tell a regular method apart from property getter/setters and event add/remove
Rather than typical code like:
private static MethodInfo GetFirstMethodWithReturnType(Type type) { return type.GetMethods(BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly) .Where(method => !method.Name.StartsWith("get_") && !method.Name.StartsWith("set_") &&
!method.Name.StartsWith("add_") && !method.Name.StartsWith("remove_")) .FirstOrDefault(method => (method.ReturnType != typeof(void))); } ...