リストからIDを返すメソッドがあります。 通常、私はこのタスクにリフレクションを使用します(クラスは通常インターフェイスまたは基本クラスを共有しないPOCOSであり、変更できませんので汎用メソッドを使用することはできません)。しかし、私は新しいdynamic
キーワードについて考えてみました。オブジェクトにC#動的メソッドを使用する
しかし、私の問題は、dataSource [index]がオブジェクトを返すことです。実行時には、オブジェクト自体が自分のクラスであり、idプロパティを持つことが保証されます。 しかし、私は、メソッドがオブジェクトを返すのでcurrent.id
public List<int> GetItemIds()
{
var result = new List<int>();
var dataSource = GetDataSource(); // returns an List<Object>
for (int i = 0; i <= dataSource.Count - 1; i++)
{
dynamic current = dataSource[i];
int id = current.Id; // throws RuntimeBinderException: Object has no definition for id
}
return result;
}
にアクセスしている間、私は、実行時にRumtineBinderExceptionを取得したと私がしたいか、私はidプロパティを取得するために後方反射に行かなければならないものをachiveする方法はあります?
更新:
current.GetType() returns object
current.GetType().GetProperties() returns a TargetInvocationException
マイPOCOS私のメインのプロジェクト(VB.net)に住んでいるが、この方法では、クラスlibaryであり、多分それが原因です。ただし、
object current = dataSource[i];
PropertyInfo prop = current.GetType().GetProperty("id", BindingFlags.Public | BindingFlags.Instance | BindingFlags.IgnoreCase);
if (prop != null)
{
int id = (int)prop.GetValue(current, null);
}
作品です。
current.GetType()は何ですか?それはあなたが期待しているタイプですか? –
ここに何か問題があります...上記の例でdynamicを使用すると、ランタイムタイプにIdプロパティがある場合に動作するはずです... – Jeff
これはうまくいくはずです - current.GetType()の情報でポストを更新できますか? 、およびcurrent.GetType()。GetProperties()? – carlosfigueira