我想克隆派生類的實例,但不知何故它不能正常工作。克隆方法是:爲什麼克隆不起作用?
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;
}
但在我真正的程序沒有。真正的課程的類聲明很長,所以我不會在這裏發佈它們。可能是什麼問題?
如果它在這個簡單的例子中起作用,那麼問題可能出在你說你忽略的代碼的某個地方? – 2012-04-22 14:05:48
你應該使用'Object.MemberwiseClone'。 – 2012-04-22 14:06:53
@EliArbel只創建一個淺拷貝。我的情況不好。但是,謝謝。 – ispiro 2012-04-22 14:09:48