2011-11-13 6 views
1

私はいくつかのプロパティを含むBackUpという名前のクラスを持っています。 たとえば、既存のインスタンスがBackUpで、そのプロパティが初期化されているとします。プロパティ名と値を知らないReflectionプロパティオブジェクトを設定します

AgentActivatorオブジェクトを作成したいところのBackUpクラスでリフレクションを使用していて、そのプロパティを設定する必要があるので、BackUpオブジェクトからプロパティを取得します。

問題はPropertyInfoオブジェクトをBackUpオブジェクトから取り込み、反射オブジェクトに一致するプロパティを設定することです。

私は次のことをやっている:

Assembly assembly = Assembly.LoadFile(localBackUp.AssemblyFileName); 
Type currentClasstype = assembly.GetType(localBackUp.ClassName);    
PropertyInfo[] properties = currentClasstype.GetProperties(); 
object classInstance = Activator.CreateInstance(localBackUp.AssemblyFileName, 
    localBackUp.ClassName); 
string propName= null;     
foreach(PropertyInfo prop in properties) 
{ 
    propName= prop.Name; 
    currentClasstype.GetProperty(propName). 
     SetValue(classInstance, findProperty(localBackUp, propNmae), null); 

} 

私はfindPropertyメソッドを実装する方法を見つける必要があります。 文字列(プロパティ名)を取得し、propNameでプロパティを保持するlocalBackUpから一致する値を返すことです。

コードから
+0

これらのタイプミスをすべて修正する方がいいでしょう –

+0

また、 'SetValue'を呼び出す方法をすでに知っていれば、あなたは' GetValue'を呼び出す方法を理解するでしょう。 –

+0

あなたの文章の意味を変えずに文法を修正しようとしました。私が成功したかどうかわからないので、そうでない場合は事前に謝罪します。 – Otiel

答えて

1

私はlocalBackupTypeclassInstanceが同じであるので、ちょうど

prop.GetSetMethod().Invoke (classInstance, new object[] { prop.GetGetMethod().Invoke(localBackUp, null) }); 

一つの発言をしてみてください別のクラスのインスタンス(localBackup)がすでに持っている同じプロパティ値を含む新しいクラスのインスタンスを初期化していることを前提としていしかし:

私の仮定が真であるなら、あなたは(インスタンスをシリアライズとデシリアライズすることによって、たとえば)しようとしている何をすべきかより良いオプションが私見あります...

0

あなたの目標がオブジェクトをクローンしているなら、最高の(私は)アプローチがここに記述されています:Deep cloning objects(@ Yahiaはシリアライズしてデシリアライズすると述べています)。非常に重要なのは、ディープコピーを返すので、元のオブジェクトと新しいオブジェクトの間にはの共有のデータがありません。

関連する問題