2017-12-30 12 views
1

同じ質問の話題がたくさんあることは知っていますが、私はとても混乱しています。オブジェクトのプロパティの値をループしますか?

オブジェクトのプロパティをループして値を書きたいと思います。

しかし、これは、プロパティの情報を持つ配列を作成しますが、それはそのobject.propertyの実際の値が格納されていない

 Dim pinfo() As PropertyInfo = MyCompanies(1).GetType().GetProperties() 

に私が見てきたすべてが言う、

enter image description here

プロパティの名前はティッカーですが、Mycompanies(1).tickerの値はAMZNです。

マイコード:

Dim pinfo() As PropertyInfo = MyCompanies(1).GetType().GetProperties() 

'Loop through Properties 
For pi = 0 To pinfo.Length - 1 
     'I want to get the values of each property 
     Console.WriteLine(?) 
    Next pi 

注:MyCompaniesは、(1)すべてのオブジェクトは、いずれかの企業クラスの

https://msdn.microsoft.com/en-us/library/b05d59ty(v=vs.110).aspx doesntのヘルプある、オブジェクト配列内のちょうど第二の目的です。それは私が私がするべきであることを信じるように導く:

For Each pi In pinfo 
     'I want to get the values of each property 
     Console.WriteLine(PropertyInfo.GetValue(MyCompanies(1)) 
    Next pi 

しかし、それも構築されません。配列内の位置を使ってオブジェクトを渡そうとしているからですか?

...と、このループの外で、私は私のオブジェクト配列をループしていますので、私はちょうど私に1を置き換えることができます考え出し...

+1

** [PropertyInfo Class](https://msdn.microsoft.com/en-us/library/system.reflection.propertyinfo(v = vs.110).aspx)**には多くのプロパティとメソッドがあります(それはどのようなデータ型であるか、読み込み専用かなど)。あなたが反復(ループ)するときに、あなたが望むものを得るためにそれをドリルする必要があります – Plutonix

答えて

1

あなたはこのように呼び出すする必要があります。

Dim props As PropertyInfo() = MyCompanies(1).GetType().GetProperties()

GetPropertiesPropertyInfoの配列を返す - 各プロパティを表す1つ。 PropertyInfoクラスは(あなただけprop.GetValue()を呼び出すことができない理由である)あなたは型情報を得、そこから特定のオブジェクトへの参照が含まれていないことを

For Each prop in props 
    Console.WriteLine(prop.GetValue(MyCompanies(1)).ToString()) 
Next 

注:ループに続いて

、。

それは単に問題のタイプを記述するテンプレートの一種である - ので、あなたはそれをプロパティ値あなたが抽出したい実際のオブジェクトへの参照を渡す必要があります。

複数のMyCompaniesオブジェクトにアクセスしていた場合は、タイプ情報を一度だけ取得してから再利用します。例えば

Dim props As PropertyInfo() = MyCompanies(1).GetType().GetProperties() 

For Each company in MyCompanies 

    Console.WriteLine(company.ToString()) 'e.g. to print the company name 

    For Each prop in props 
     Console.WriteLine(prop.GetValue(company).ToString()) 
    Next 
Next 

私はどんな小さなスリップを言い訳コードをテストしていません。

+0

小括弧ではなく小括弧がpropertyinfoの後に来るのはなぜですか?私は配列を宣言したたびに、型としてdim配列(長さ)を書きます。 –

+0

これは私の好みです。なぜなら、配列はある種の "型"であると考えているからです。固定長配列を初期化する場合、宣言のコーシャーメソッドは、Dim array As Integer()= New Integer(2){}と考えられます。しかし、VB6からの構文保持は、単純にDim array(2)As Integer(Basicより前のC++)がオブジェクト指向の原則で改造されていて、配列構文がその改訂より前になっていたことを言わなければなりませんでした。 – Steve

関連する問題