/// <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; }
/// <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]); }
/// <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); }
/// <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); }
/// <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); }
/// <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); }
/// <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); }
/// <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)); }