2009-04-15 11 views
1

私は、event1、event2という名前のプロパティを持つ.Netオブジェクト(C#で)を持っています。ループ内で同じ名前のプロパティにアクセスする

これらのそれぞれについてif-elseを実行する必要があります。私はこれらの上にループする方法があります。これらがコントロールであればコントロールコレクションを使用できましたが、これらはオブジェクトのプロパティです。

助けが必要ですか?

答えて

2

あなたが

for(int eventIndex = 0; eventIndex < NUM_EVENTS; eventIndex++) 
    { 
     PropertyInfo eventPropertyInfo = 
      this.GetType().GetProperty("Event" + eventIndex); 

     if (eventPropertyInfo.GetValue(this, null) == yourValue) 
     { 
      //Do Something here 
     } 
    } 
2

手動で書き出すのはおそらく最も明白です。 しかし、反射を使用することは可能です。

0

はい、Reflectionを使用してPropertyInfoオブジェクトを取得し、名前を調べて必要なデータを取得できます。

2

reflectionを使用するのが最善の策ですが、必要なものが残っている可能性があります。以下のスニペットは、MSDNから取得されます:

  foreach (MemberInfo mi in t.GetMembers()) 
      {         

       // If the member is a property, display information about the 
       // property's accessor methods. 
       if (mi.MemberType==MemberTypes.Property) 
       { 
        PropertyInfo pmi = ((PropertyInfo) mi); 
        foreach (MethodInfo am in pmi.GetAccessors()) 
        { 
         Display(indent+1, "Accessor method: {0}", am); 
        } 
       } 
      } 
1

を扱っているどのように多くの性質を知っていると仮定すると、そのようにするためのあなたの理由は何ですか?それは開発をスピードアップすることですか?既に提案されているようにリフレクションを使用することはできますが、実行時にパフォーマンスペナルティを取る代わりに、単にプロパティを直接参照する方がはるかに効果的です。

0

反射は簡単ですが、アプリケーションの使用状況によっては遅くなることがあります。

反射が遅い場合は、コードをEmiting速くすることができます。簡単なことではありませんが、最終結果はすべての行を手作業で書いた場合と同じです。そのようなコードを維持することも難しい。

関連する問題