派生クラスのインスタンスのクローンを作成しようとしていますが、どういうわけかうまく機能しません。クローン作成方法は次のとおりです。
public static T CloneFieldsAndProperties<T>(T input)
{
T result = (T)Activator.CreateInstance(typeof(T));
PropertyInfo[] listOfProps = typeof(T).GetProperties(BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Static | BindingFlags.Public | BindingFlags.FlattenHierarchy | BindingFlags.CreateInstance);
FieldInfo[] listOfFields = typeof(T).GetFields(BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Static | BindingFlags.Public | BindingFlags.FlattenHierarchy | BindingFlags.CreateInstance);
foreach (PropertyInfo prop in listOfProps) prop.SetValue(result, prop.GetValue(input, null), null);
foreach (FieldInfo field in listOfFields) field.SetValue(result, field.GetValue(input));
return result;
}
ご覧のとおり、機能BindingFlags
していなかったため、多く追加しました。しかし、役に立たない。
単純なケースで機能します。
MyclassA1 a1 = new MyclassA1();
MyclassA a = CloneFieldsAndProperties(a1);
if (a is MyclassA1) Text = "Works";
どこ:
class MyclassA
{
public int i;
}
class MyclassA1 : MyclassA
{
public int i1;
}
しかし、私の実際のプログラムではそうではありません。実際のプログラムのクラスの宣言は長いので、ここでは投稿しません。何が問題なのでしょう?