ReflectionExtensions.cs 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Reflection;
  5. using System.Text;
  6. namespace Ant.Extensions
  7. {
  8. internal static class ReflectionExtensions
  9. {
  10. public static Type GetMemberInfoType(this MemberInfo member)
  11. {
  12. if (member == null)
  13. throw new ArgumentNullException("member");
  14. if (member.MemberType == MemberTypes.Property)
  15. return ((PropertyInfo)member).PropertyType;
  16. if (member.MemberType == MemberTypes.Field)
  17. return ((FieldInfo)member).FieldType;
  18. if (member is MethodInfo)
  19. return ((MethodInfo)member).ReturnType;
  20. if (member is ConstructorInfo)
  21. return ((ConstructorInfo)member).ReflectedType;
  22. return null;
  23. }
  24. public static Type GetPropertyOrFieldType(this MemberInfo propertyOrField)
  25. {
  26. if (propertyOrField.MemberType == MemberTypes.Property)
  27. return ((PropertyInfo)propertyOrField).PropertyType;
  28. if (propertyOrField.MemberType == MemberTypes.Field)
  29. return ((FieldInfo)propertyOrField).FieldType;
  30. throw new NotSupportedException();
  31. }
  32. public static void SetPropertyOrFieldValue(this MemberInfo propertyOrField, object obj, object value)
  33. {
  34. if (propertyOrField.MemberType == MemberTypes.Property)
  35. ((PropertyInfo)propertyOrField).SetValue(obj, value, null);
  36. else if (propertyOrField.MemberType == MemberTypes.Field)
  37. ((FieldInfo)propertyOrField).SetValue(obj, value);
  38. throw new ArgumentException();
  39. }
  40. public static object GetPropertyOrFieldValue(this MemberInfo propertyOrField, object obj)
  41. {
  42. if (propertyOrField.MemberType == MemberTypes.Property)
  43. return ((PropertyInfo)propertyOrField).GetValue(obj, null);
  44. else if (propertyOrField.MemberType == MemberTypes.Field)
  45. return ((FieldInfo)propertyOrField).GetValue(obj);
  46. throw new ArgumentException();
  47. }
  48. }
  49. }