0

このコードを使用して、あるオブジェクトのプロパティをその名前で取得します。

string propName = "Buttons"; // getting this runtime
Type t = container.GetType();
PropertyInfo p = t.GetProperty(propName);
object prop = p.GetValue(container, null);

プロパティのタイプはプロパティ名によって異なりますが、すべてのプロパティがIListインターフェイスを実装しているため、すべてのプロパティにAdd()メソッドがあります。ここで、このメソッドを使用してそのプロパティに要素を追加できるようにしたいと思います。しかし、タイプでこのメソッドを呼び出すことはできませんobject。どういうわけかそれをランタイムにキャストする必要がありますが、その前にどういうわけかを使用する必要がありますprop.Add()。これはもちろん、コンパイルエラーをトリガーします。オブジェクトタイプに関係なく実行時にメソッドを呼び出す方法はありますか(もちろん、オブジェクトにそのメソッドがあることを確認してください)。

PS質問が明確でない場合は、詳細を追加できます。

4

2 に答える 2

3

IList結果を?にキャストするだけです。

IList prop = (IList)p.GetValue(container, null);

IListその後、メンバーにアクセスできるようになります。もちろん、これはあなたが正しいことを前提としています。IListそうでなければ、あなたはsを取得し始めますInvalidCastException


または、これはお勧めしませんが、Addメソッドが存在することを常に想定し、動的を使用してダックタイピングすることができます。

dynamic prop = p.GetValue(container, null);
prop.Add("Foo");

上記は、DLRを使用して実行時に解決されます。Add単一のstringパラメーターを受け取るパブリックメソッドを見つけようとします。

于 2012-07-12T12:47:14.830 に答える
1
MethodInfo methodInfo = t.GetMethod("Add");
result = methodInfo.Invoke(prop, parametersArray);
于 2012-07-12T12:49:08.520 に答える