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