private MemberAssignment GetMemberBindingExpression(ICustomAttributeNamedArgument namedArgument) { var constantExpression = ConvertTypedArgumentToExpression(namedArgument); var bindingExpression = Expression.Bind(namedArgument.MemberInfo, constantExpression); return(bindingExpression); }
private NamedArgumentDeclaration MakeEmittable(ICustomAttributeNamedArgument customAttributeNamedArgument) { var member = customAttributeNamedArgument.MemberInfo; var emittableValue = MakeAttributeArgumentEmittable(customAttributeNamedArgument.Value); return(member is FieldInfo ? new NamedArgumentDeclaration((FieldInfo)member, emittableValue) : new NamedArgumentDeclaration((PropertyInfo)member, emittableValue)); }
private NamedArgumentDeclaration CreateNamedArgumentDeclaration(ICustomAttributeNamedArgument namedArgument) { if (namedArgument.MemberInfo is FieldInfo) { return(new NamedArgumentDeclaration((FieldInfo)namedArgument.MemberInfo, namedArgument.Value)); } else { return(new NamedArgumentDeclaration((PropertyInfo)namedArgument.MemberInfo, namedArgument.Value)); } }
private ICustomAttributeNamedArgument CopyNamedArgument(ICustomAttributeNamedArgument namedArgument) { var copiedValue = DeepCopyArrays(namedArgument.Value); if (namedArgument.MemberInfo is PropertyInfo) { return(new NamedArgumentDeclaration(((PropertyInfo)namedArgument.MemberInfo), copiedValue)); } else { return(new NamedArgumentDeclaration(((FieldInfo)namedArgument.MemberInfo), copiedValue)); } }
/// <summary> /// Converts a <see cref="CustomAttributeTypedArgument"/> using an <paramref name="arrayConstructor"/> for array values and a /// <paramref name="elementConstructor"/> for element values. /// </summary> /// <typeparam name="T">The destination type.</typeparam> /// <param name="argument">The <see cref="CustomAttributeTypedArgument"/></param> /// <param name="elementConstructor">A delegate creating a new value based on the value and its type.</param> /// <param name="arrayConstructor">A delegate creating a new array based on its type and values.</param> /// <returns>An instance of <typeparam name="T"/> using the element and array constructor.</returns> public static T ConvertTo <T> ( this ICustomAttributeNamedArgument argument, Func <Type, object, T> elementConstructor, Func <Type, IEnumerable <T>, T> arrayConstructor) { ArgumentUtility.CheckNotNull("argument", argument); ArgumentUtility.CheckNotNull("elementConstructor", elementConstructor); ArgumentUtility.CheckNotNull("arrayConstructor", arrayConstructor); var argumentType = argument.MemberType; if (!argumentType.IsArray) { return(elementConstructor(argumentType, argument.Value)); } else { var elementType = argumentType.GetElementType(); var objects = (IEnumerable <object>)argument.Value; return(arrayConstructor(elementType, objects.Select(x => elementConstructor(elementType, x)))); } }
private static object ConvertTypedArgumentToObject(ICustomAttributeNamedArgument typedArgument) { return(typedArgument.ConvertTo(CreateElement, CreateArray)); }
private Expression ConvertTypedArgumentToExpression(ICustomAttributeNamedArgument typedArgument) { return(typedArgument.ConvertTo <Expression> (CreateElement, CreateArray)); }