System.Management.Automation.CommandProcessor.BindArgument C# (CSharp) Method

BindArgument() private method

private BindArgument ( string name, object value, Type type ) : void
name string
value object
type System.Type
return void
        private void BindArgument(string name, object value, Type type)
        {
            Type memberType = null;

            // Look for Property to bind to
            MemberInfo memberInfo = Command.GetType().GetProperty(name, type);

            if (memberInfo != null)
            {
                memberType = ((PropertyInfo)memberInfo).PropertyType;
            }
            else  // No property found try bind to field instead
            {
                memberInfo = Command.GetType().GetField(name);

                if (memberInfo != null)
                {
                    memberType = ((FieldInfo)memberInfo).FieldType;
                }
                else
                {
                    throw new Exception("Unable to get field or property named: " + name);
                }
            }

            // TODO: make this generic
            if (memberType == typeof(PSObject[]))
            {
                SetValue(memberInfo, Command, new[] { PSObject.AsPSObject(value) });
            }

            else if (memberType == typeof(String[]))
            {
                SetValue(memberInfo, Command, new[] { value.ToString() });
            }

            else if (memberType == typeof(String))
            {
                SetValue(memberInfo, Command, value.ToString());
            }

            else if (memberType == typeof(PSObject))
            {
                SetValue(memberInfo, Command, PSObject.AsPSObject(value));
            }

            else if (memberType == typeof(SwitchParameter))
            {
                SetValue(memberInfo, Command, new SwitchParameter(true));
            }

            else if (memberType == typeof(Object[]))
            {
                SetValue(memberInfo, Command, new[] { value });
            }

            else
            {
                SetValue(memberInfo, Command, value);
            }
        }