ReflectionExtensions.cs 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. using System;
  2. using System.Reflection;
  3. namespace Jint.Extensions
  4. {
  5. internal static class ReflectionExtensions
  6. {
  7. internal static void SetValue(this MemberInfo memberInfo, object forObject, object value)
  8. {
  9. switch (memberInfo.MemberType)
  10. {
  11. case MemberTypes.Field:
  12. var fieldInfo = (FieldInfo) memberInfo;
  13. if (value != null && fieldInfo.FieldType.IsAssignableFrom(value.GetType()))
  14. {
  15. fieldInfo.SetValue(forObject, value);
  16. }
  17. break;
  18. case MemberTypes.Property:
  19. var propertyInfo = (PropertyInfo) memberInfo;
  20. if (value != null && propertyInfo.PropertyType.IsAssignableFrom(value.GetType()))
  21. {
  22. propertyInfo.SetValue(forObject, value);
  23. }
  24. break;
  25. }
  26. }
  27. internal static Type GetDefinedType(this MemberInfo memberInfo)
  28. {
  29. switch (memberInfo)
  30. {
  31. case PropertyInfo propertyInfo:
  32. return propertyInfo.PropertyType;
  33. case FieldInfo fieldInfo:
  34. return fieldInfo.FieldType;
  35. }
  36. return null;
  37. }
  38. }
  39. }