Пример #1
0
        /// <summary>
        /// source 静的フィールド fieldName の index 番目に値を設定します。
        /// </summary>
        /// <param name="source">設定するフィールドを静的に保持するインスタンス。</param>
        /// <param name="fieldName">設定するフィールド名。</param>
        /// <param name="index">設定するフィールドのインデックス。</param>
        /// <param name="value">設定する値。</param>
        public static void ArrayField(Type type, string fieldName, int index, object value)
        {
            var field = type.GetField(fieldName, Reflector.InstanceAllFlags);

            if (field == null)
            {
                throw FieldReflectionException.NotFound(type, fieldName);
            }

            var obj = field.GetValue(null);

            if (obj == null)
            {
                throw FieldReflectionException.NullCollection(type, fieldName);
            }

            var list = obj as System.Collections.IList;

            if (list == null)
            {
                throw FieldReflectionException.CannotSetToCollection(type, fieldName);
            }

            list[index] = value;
        }
Пример #2
0
        /// <summary>
        /// source インスタンスのメンバフィールド fieldName の index 番目の値を取得します。
        /// </summary>
        /// <param name="source">取得するフィールドをメンバとして保持するインスタンス。</param>
        /// <param name="fieldName">取得するフィールド名。</param>
        /// <param name="index">取得するフィールドのインデックス。</param>
        /// <returns>指定したフィールドの index 番目の値。</returns>
        public static object ArrayField(this object source, string fieldName, int index)
        {
            var field = source.GetType().GetField(fieldName, Reflector.InstanceAllFlags);

            if (field == null)
            {
                throw FieldReflectionException.NotFound(source.GetType(), fieldName);
            }

            var obj = field.GetValue(source);

            if (obj == null)
            {
                throw FieldReflectionException.NullCollection(source.GetType(), fieldName);
            }

            var list = obj as System.Collections.IList;

            if (list == null)
            {
                throw FieldReflectionException.CannotSetToCollection(source.GetType(), fieldName);
            }

            return(list[index]);
        }
Пример #3
0
        /// <summary>
        /// リフレクション時に対象のフィールドが null のため、コレクションとして参照できなかったことを表す NilaLib.Reflection.FieldReflectionException クラスのインスタンスを作成して返します。
        /// </summary>
        /// <param name="type">型情報。</param>
        /// <param name="fieldName">フィールド名。</param>
        /// <returns>NilaLib.Reflection.FieldReflectionException クラスのインスタンス。</returns>
        public static FieldReflectionException NullCollection(Type type, string fieldName)
        {
            var ex = new FieldReflectionException(string.Format("フィールド {0}.{1} は null のため、コレクションとして参照できません。", type.FullName, fieldName));

            ex.Type      = type;
            ex.FieldName = fieldName;
            return(ex);
        }
Пример #4
0
        /// <summary>
        /// リフレクション時に対象のフィールドが値の設定が可能なコレクションではなかったことを表す NilaLib.Reflection.FieldReflectionException クラスのインスタンスを作成して返します。
        /// </summary>
        /// <param name="type">型情報。</param>
        /// <param name="fieldName">フィールド名。</param>
        /// <returns>NilaLib.Reflection.FieldReflectionException クラスのインスタンス。</returns>
        public static FieldReflectionException CannotSetToCollection(Type type, string fieldName)
        {
            var ex = new FieldReflectionException(string.Format("フィールド {0}.{1} は値の設定が可能なコレクションではありませんでした。", type.FullName, fieldName));

            ex.Type      = type;
            ex.FieldName = fieldName;
            return(ex);
        }
Пример #5
0
        /// <summary>
        /// リフレクション時に対象のフィールドが見つからなかったことを表す NilaLib.Reflection.FieldReflectionException クラスのインスタンスを作成して返します。
        /// </summary>
        /// <param name="type">型情報。</param>
        /// <param name="fieldName">フィールド名。</param>
        /// <returns>NilaLib.Reflection.FieldReflectionException クラスのインスタンス。</returns>
        public static FieldReflectionException NotFound(Type type, string fieldName)
        {
            var ex = new FieldReflectionException(string.Format("フィールド {0}.{1} が見つかりませんでした。", type.FullName, fieldName));

            ex.Type      = type;
            ex.FieldName = fieldName;
            return(ex);
        }
Пример #6
0
        /// <summary>
        /// type 型の静的フィールド fieldName に値 value を設定します。
        /// </summary>
        /// <param name="type">設定するフィールドを静的に保持する型。</param>
        /// <param name="fieldName">設定するフィールド名。</param>
        /// <param name="value">設定する値。</param>
        public static void Field(Type type, string fieldName, object value)
        {
            var field = type.GetField(fieldName, Reflector.StaticAllFlags);

            if (field == null)
            {
                throw FieldReflectionException.NotFound(type, fieldName);
            }

            field.SetValue(null, value);
        }
Пример #7
0
        /// <summary>
        /// source インスタンスのメンバフィールド fieldName に値 value を設定します。
        /// </summary>
        /// <param name="source">設定するフィールドをメンバとして保持するインスタンス。</param>
        /// <param name="fieldName">設定するフィールド名。</param>
        /// <param name="value">設定する値。</param>
        public static void Field(this object source, string fieldName, object value)
        {
            var field = source.GetType().GetField(fieldName, Reflector.InstanceAllFlags);

            if (field == null)
            {
                throw FieldReflectionException.NotFound(source.GetType(), fieldName);
            }

            field.SetValue(source, value);
        }
Пример #8
0
        /// <summary>
        /// type 型の静的フィールド fieldName の値を取得します。
        /// </summary>
        /// <param name="type">取得するフィールドを静的に保持する型。</param>
        /// <param name="fieldName">取得するフィールド名。</param>
        /// <returns>指定したフィールドの値。</returns>
        public static object Field(Type type, string fieldName)
        {
            var field = type.GetField(fieldName, Reflector.StaticAllFlags);

            if (field == null)
            {
                throw FieldReflectionException.NotFound(type, fieldName);
            }

            return(field.GetValue(null));
        }