コード例 #1
0
        static IEnumerable <object?> Convert(IEnumerable <CustomAttributeTypedArgument> arguments)
        {
            foreach (var argument in arguments)
            {
                var value = argument.Value;

                // Collections are recursively IEnumerable<CustomAttributeTypedArgument> rather than
                // being the exact matching type, so the inner values must be converted.
                if (value is IEnumerable <CustomAttributeTypedArgument> valueAsEnumerable)
                {
                    value = Convert(valueAsEnumerable).ToArray();
                }
                else if (value != null && value.GetType() != argument.ArgumentType && argument.ArgumentType.IsEnum)
                {
                    value = Enum.Parse(argument.ArgumentType, value.ToString() !);
                }

                if (value != null && value.GetType() != argument.ArgumentType && argument.ArgumentType.IsArray)
                {
                    value = Reflector.ConvertArgument(value, argument.ArgumentType);
                }

                yield return(value);
            }
        }