2
0

CustomAttributeNamedArgument.cs 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. // Licensed to the .NET Foundation under one or more agreements.
  2. // The .NET Foundation licenses this file to you under the MIT license.
  3. // See the LICENSE file in the project root for more information.
  4. namespace System.Reflection
  5. {
  6. public readonly partial struct CustomAttributeNamedArgument
  7. {
  8. public static bool operator ==(CustomAttributeNamedArgument left, CustomAttributeNamedArgument right) => left.Equals(right);
  9. public static bool operator !=(CustomAttributeNamedArgument left, CustomAttributeNamedArgument right) => !left.Equals(right);
  10. private readonly MemberInfo m_memberInfo;
  11. private readonly CustomAttributeTypedArgument m_value;
  12. public CustomAttributeNamedArgument(MemberInfo memberInfo, object? value)
  13. {
  14. if (memberInfo == null)
  15. throw new ArgumentNullException(nameof(memberInfo));
  16. Type type;
  17. if (memberInfo is FieldInfo field)
  18. {
  19. type = field.FieldType;
  20. }
  21. else if (memberInfo is PropertyInfo property)
  22. {
  23. type = property.PropertyType;
  24. }
  25. else
  26. {
  27. throw new ArgumentException(SR.Argument_InvalidMemberForNamedArgument);
  28. }
  29. m_memberInfo = memberInfo;
  30. m_value = new CustomAttributeTypedArgument(type, value);
  31. }
  32. public CustomAttributeNamedArgument(MemberInfo memberInfo, CustomAttributeTypedArgument typedArgument)
  33. {
  34. if (memberInfo == null)
  35. throw new ArgumentNullException(nameof(memberInfo));
  36. m_memberInfo = memberInfo;
  37. m_value = typedArgument;
  38. }
  39. public override string ToString()
  40. {
  41. if (m_memberInfo == null)
  42. return base.ToString()!;
  43. return string.Format("{0} = {1}", MemberInfo.Name, TypedValue.ToString(ArgumentType != typeof(object)));
  44. }
  45. public override int GetHashCode()
  46. {
  47. return base.GetHashCode();
  48. }
  49. public override bool Equals(object? obj)
  50. {
  51. return obj == (object)this;
  52. }
  53. internal Type ArgumentType
  54. {
  55. get
  56. {
  57. return m_memberInfo is FieldInfo ?
  58. ((FieldInfo)m_memberInfo).FieldType :
  59. ((PropertyInfo)m_memberInfo).PropertyType;
  60. }
  61. }
  62. public MemberInfo MemberInfo => m_memberInfo;
  63. public CustomAttributeTypedArgument TypedValue => m_value;
  64. public string MemberName => MemberInfo.Name;
  65. public bool IsField => MemberInfo is FieldInfo;
  66. }
  67. }