2016-10-07 8 views
1

私はアクセスしたいオブジェクトを持つリストを含む汎用オブジェクトを持っています。一般的なオブジェクト内のリストにアクセスする方法

object sourceValue = new List<tab> {new tab()}; 
PropertyInfo[] sourcePropertyInfo = sourceValue.GetType().GetProperties(); 
//First field of PropertyInfo is the list, second is a Raw instance 
object result = sourcePropertyInfo[0].GetValue(sourceValue, null); 

を使用することにより、タブのオブジェクトは次のようになりますここで、ここでは

public partial class tab 
{ 
    public long TabId { get; set; } 
    public string Title { get; set; } 
} 

私は結果変数throughtリストにアクセスしたいと思いますが、それは整数である、結果= 0になります。ほとんどのlikleyはリストからcountプロパティを受け取ります。 (タブの)リスト内のオブジェクトの値にアクセスするにはどうすればよいですか?

注意sourceValueオブジェクトのタイプにアクセスしたり、オブジェクトのタイプを変更することはできません。

+0

あなた 'PropertyInfo'-配列の最初のフィールドは、リスト自体もその内の任意のインスタンスでもない、タイプ'リストの最初のプロパティです'おそらく' Count'プロパティです。私はあなたが実際に全く異なる質問をしていると思いますが、これはXY問題のように思えます。実際の問題に対する解決策だと思っています。 。 – HimBromBeere

+2

なぜここで '反射 'を使用しているのかわかりませんが、必要はありません。 'sourceValue'を' List 'にキャストするだけで動作します。 –

+1

このリンクはあなたに役立つでしょう。http://stackoverflow.com/questions/10710156/using-reflection-to-get-values-from-properties-from-a-list-of-a-class –

答えて

4

要素のタイプではなく、リストタイプのプロパティを取得しています。

foreach (object element in (sourceValue as IEnumerable ?? Enumerable.Empty<object>())) 
{ 
    var type = element.GetType(); 
    var props = type.GetProperties(); 
    object result = props.First().GetValue(element, null); 
} 

注:これは、最適化することができます:)

関連する問題