我有以下类:
我需要现在一个AuthorizationSetObject的深拷贝。我该怎么做?
我尝试过这样:
问题在于AuthorizationObjectList不是一个真正的深拷贝。如果我在深拷贝后更改目标的“Text”属性,则源的“Text”也会被更改。
可能需要实现类似于“pi.PropertyType.BaseType.IsGenericType”的内容,然后做些其他的事情...但是什么呢?
有人有想法吗?
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”的内容,然后做些其他的事情...但是什么呢?
有人有想法吗?
List originalList = new List();
// 添加元素到原始列表
List copyList = originalList.ToList();
// 对复制的列表进行修改
// 此时修改copyList不会影响originalList
- Hardradastruct
而不是class
,因为它们是按值传递而不是按引用传递。我建议你深入研究它们之间的区别,因为这是你应该了解的 C# 核心原则。你正在过度设计你的问题,并使其看起来解决方案非常复杂。通常情况下,框架没有实现某些功能的原因是因为你可能处于代码异味的情况下,只需要稍微重构一下即可。 - Piotr Kula