Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public static class ReflectionExtensions
- {
- public static T GetFieldValue<T>(this object obj, string name)
- {
- var bindingFlags = BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance;
- var field = obj.GetType().GetField(name, bindingFlags);
- if (field == null)
- field = obj.GetType().BaseType.GetField(name, bindingFlags);
- return (T)field?.GetValue(obj);
- }
- public static object InvokeMethod(this object obj, string methodName, params object[] methodParams)
- {
- var methodParamTypes = methodParams?.Select(p => p.GetType()).ToArray() ?? new Type[] { };
- var bindingFlags = BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance | BindingFlags.Static;
- MethodInfo method = null;
- var type = obj.GetType();
- while (method == null && type != null)
- {
- method = type.GetMethod(methodName, bindingFlags, Type.DefaultBinder, methodParamTypes, null);
- var intfs = type.GetInterfaces();
- if (method != null)
- break;
- foreach (var intf in intfs)
- {
- method = intf.GetMethod(methodName, bindingFlags, Type.DefaultBinder, methodParamTypes, null);
- if (method != null)
- break;
- }
- type = type.BaseType;
- }
- return method?.Invoke(obj, methodParams);
- }
- }
Add Comment
Please, Sign In to add comment