1

property1property2 、 perperty3などのいくつかのプロパティを持つクラスmyClassがあるとしましょう。ここで、これらの各プロパティを配列に入力して、インデックスを介して各プロパティにアクセスできるようにします。 . そうする自動方法はありますか?

これは、SportsStore (Pro ASPN.NET MVC/Steve Sanderson/Apress) の例で、アクティブなコントローラーをすべて「アセンブリ」に集める方法を示しています。

 var controllerTypes = from t in Assembly.GetExecutingAssembly().GetTypes()
 where typeof(IController).IsAssignableFrom(t) 
 select t; 

 foreach(Type t in controllerTypes)
    //Do something

クラスのプロパティを収集 (のみ) し、それぞれの型の値 (int、string、またはカスタム型) に関係なく、それらを配列に格納するために使用できる上記のようなものがあるのだろうか

はっきりと自分を表現できたと思います。それ以外の場合は、テキストを修正できます。

助けてくれてありがとう。

4

3 に答える 3

4

リフレクションを使用できます:

var foo = new
{
    Prop1 = "prop1",
    Prop2 = 1,
    Prop3 = DateTime.Now
};

var properties = TypeDescriptor.GetProperties(foo.GetType());
var list = new ArrayList();
foreach (PropertyDescriptor property in properties)
{
    var value = property.GetValue(foo);
    list.Add(value);
}

目によく見えるLINQバージョン:

var list = TypeDescriptor
    .GetProperties(foo.GetType())
    .Cast<PropertyDescriptor>()
    .Select(x => x.GetValue(foo))
    .ToArray();
于 2010-03-26T09:17:12.987 に答える
0

私はここからこれを得まし

foreach(Type t in controllerTypes)
{
  foreach (MemberInfo mi in t.GetMembers() )
  {
    if (mi.MemberType==MemberTypes.Property)
    {
      // If the member is a property, display information about the property's accessor methods
      foreach ( MethodInfo am in ((PropertyInfo) mi).GetAccessors() )
      {
        // do something with [am]
      }
    }
  }
}
于 2010-03-26T09:17:13.553 に答える
-1

Type.GetProperties ()メソッドは役に立ちますか?

于 2010-03-26T09:15:53.533 に答える