次のクラスがあります。
public partial class AuthorizationSetObject
{
public AuthorizationObjectList AuthorizationObjects { get; set; }
}
public partial class AuthorizationObject
{
public string Text { get; set; }
}
public partial class AuthorizationObjectList : List<AuthorizationObject>
{
}
AuthorizationSetObject のディープ コピーが必要です。これどうやってするの?
私はこのように試しました:
public static bool CopyProperties(object source, object target)
{
var customerType = target.GetType();
foreach (var prop in source.GetType().GetProperties())
{
var propGetter = prop.GetGetMethod();
if (propGetter != null)
{
PropertyInfo pi = customerType.GetProperty(prop.Name);
if (pi != null)
{
var propSetter = pi.GetSetMethod();
if (propSetter != null)
{
var valueToSet = propGetter.Invoke(source, null);
propSetter.Invoke(target, new[] { valueToSet });
}
}
}
}
return true;
}
問題は、AuthorizationObjectList が実際のディープ コピーではないことです。ディープ コピー後にターゲットからプロパティ "Text" を変更すると、ソースからの "Text" も変更されます。
おそらく、「pi.PropertyType.BaseType.IsGenericType」のような実装が必要で、それから何か他のことをする必要があります...しかし、何??
誰かアイデアがありますか?