0

私は持っている:

  • クラスフィールドの名前
  • フィールドを含むクラス インスタンス

クラスフィールドは次のように「可能性があります」:

  • リフレクションを介して直接設定したいフィールド
  • 新しい List インスタンスを割り当てたくないので設定したくない List インスタンスですが、代わりに「Add」メソッドを使用して追加したいと考えています。

問題: 含まれているオブジェクト内に List インスタンスの実際のオブジェクトがありません。

問題を説明するサンプル コード:

class Target
{
    FieldInfo m_FieldInfo;
    MethodInfo m_MethodInfo;
    object m_Target;

    public Target( string nameOfTargetField, object containingObject )
    {
        m_Target = containingObject;
        Type type = containingObject.GetType();
        BindingFlags bindingFlag = BindingFlags.Public | BindingFlags.Instance;
        m_FieldInfo = type.GetField( nameOfTargetField, bindingFlag );

        type = m_FieldInfo.FieldType;
        m_MethodInfo = type.GetMethod( "Add" );
    }

    public void Set( object value )
    {
        if (m_MethodInfo != null) {
            object[] parametersArray = new object[] { value };
            // This obviously will not work, as m_Target is the containing object,
            // no the List<T> instance contained within it:
            m_MethodInfo.Invoke( m_Target, parametersArray );
        } else if (m_FieldInfo != null) {
            m_FieldInfo.SetValue( m_Target, value );
        }
    }
}

助言がありますか?

ありがとう!

4

0 に答える 0