2016-12-22 18 views
1

私はリストを持っていますが、オブジェクトのタイプはリフレクションによって実行時にのみ検出されます。しかし、実際のエンティティにリストを割り当てようとすると、「オブジェクトを変換できません」というエラーがスローされます。以下のコード、リスト<Object>をリストに動的に変換する<Customer>

var obj = new List<Object>(); 
obj.Add(cust1); 
obj.Add(Cust2); 
Type newType = t.GetProperty("Customer").PropertyType// I will get type from property 
var data= Convert.ChangeType(obj,newType); //This line throws error` 
+1

'型t = t.GetProperty( "お客様")PropertyTypeはを//私はproperty'から型を取得します - 変数を定義していて、その変数を同時に使用しています。それは意味をなさない。 – StriplingWarrior

+0

なぜ*正確に* 'リスト'が必要ですか?この説明から、 'List 'を 'List 'に変換したいと思うのですが、 'T'は実行時に決定されますが、' data'は 'object'型を持たなければなりません。 'リスト'これにより、あなたのコードはより弱く型付けされます。 –

+0

これはなんですか?:リスト得意先= obj.Select(O =>(Customer)O.GetType()。GetProperty( "Customer")。GetValue(O、null))ToList(); ' – Fruchtzwerg

答えて

3

あなたobjオブジェクトイストないCustomerがあり、それはCustomerListです。 だから、あなたはそれの種類をこのように取得する必要があります。

var listType = typeof(List<>).MakeGenericType(t); 

をしかし、あなたは、あなたがListIConvertibleインタフェースを実装していないことを、Exception取得します。このlistTypeににあなたのオブジェクトを変換することができませんでした。

ソリューションは、次のとおりです。ちょうど新しいリストを作成し、そこにすべてのデータをコピーするには:。

object data = Activator.CreateInstance(listType); 
foreach (var o in obj) 
{ 
    listType.GetMethod("Add").Invoke(data, new []{o}); 
} 
関連する問題