2009-08-26 18 views
0

ここにシナリオがあります。私は、Addressオブジェクトを持つPersonオブジェクトを持っています。人は住所のリストを持っています。オブジェクトのプロパティを反映させてすべてのオブジェクトを作成する!

ここで、Personのプロパティを反復したいと思います。リストに到達すると、Addressオブジェクトのオブジェクトを作成します。どうやってやるの?

更新:

public class Person 
    { 
     public string FirstName { get; set; } 
     public string LastName { get; set; } 

     private List<Address> _addresses = new List<Address>(); 

     public void AddAddress(Address address) 
     { 
      _addresses.Add(address); 
      address.Person = this; 
     } 

     public List<Address> Addresses 
     { 
      get { return _addresses; } 
      set { _addresses = value; } 
     } 
    } 
var properties = item.GetType().GetProperties(BindingFlags.Public | BindingFlags.Instance); 
      foreach(var property in properties) 
      { 
       var propertyType = property.PropertyType; 

       if (!propertyType.IsGenericType) continue; 

       var obj = Activator.CreateInstance(propertyType); 

       var genericType = obj.GetType().GetGenericTypeDefinition(); 

       Console.WriteLine(obj.GetType().Name); 


       var type = property.GetType(); 
      } 

上記反射コードは私のリストを返しますが、それはタイプのリストです。私は住所であるGeneric Typeが欲しいです。

+0

あなたのPersonクラスのコードと、あなたがやりたいことに関する擬似コードスニペットを共有できますか? –

+0

ああ、obj.GetType()。GetGenericArguments();アドレス –

+0

を返します実際には問題は解決しませんでした!リフレクションを使用してリスト

コレクションを反復するにはどうすればよいですか。 –

答えて

0

トニー、アドレスクラスにアクセスできる場合は、これを単純に行うことができます。

var properties = item.GetType().GetProperties(BindingFlags.Public | BindingFlags.Instance); 
      List<Address> retVal; 
      foreach (var property in properties) 
      { 
       var propertyType = property.PropertyType; 
       if (!propertyType.IsGenericType) continue; 


       retVal = property.GetValue(item, new object[] { }) as List<Address>; 

       if (retVal != null) 
        break; 
      } 

      //now you have your List<Address> in retVal 
+0

ありがとう!たくさんこれが私の質問に答えました –

関連する問題