私は持っている:
- クラスフィールドの名前
- フィールドを含むクラス インスタンス
クラスフィールドは次のように「可能性があります」:
- リフレクションを介して直接設定したいフィールド
- 新しい 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 );
}
}
}
助言がありますか?
ありがとう!