如何使列表项值不引用对象
How to make list item value not reference to the object
我已添加的列表项根据当前对象 (obj) 值进行更新。
如何使列表不更新或如何复制对象?
public static void ReadData<T>(string filename, T obj,string node)
{
var xmlDocument = new XmlDocument();
xmlDocument.Load(filename);
List<T> objectList = new List<T>();
XmlNodeList xmlNodeList = xmlDocument.SelectNodes("//"+node);
for (var i = 0; i < xmlNodeList?.Count; i++)
{
var j = 0;
foreach (var objectProperty in obj.GetType().GetProperties())
{
if (objectProperty.CanRead)
{
object value;
if (objectProperty.PropertyType == typeof(bool))
{
value = bool.Parse(xmlNodeList[i].ChildNodes[j].InnerText);
}
else
{
value= xmlNodeList[i].ChildNodes[j].InnerText;
}
objectProperty.SetValue(obj, value);
j++;
}
}
objectList.Add(obj);
}
}
1.You可以实现IConeable
public class ClonableClass : ICloneable
{
public object Clone()
{
return this.MemberwiseClone();
}
}
现在a和b指的不是同一个对象。
var a = new ClonableClass ();
var b = (ClonableClass)a.Clone();
2.The 深度克隆的最简单方法是序列化对象然后反序列化它。
var objStr= JsonConvert.SerializeObject(obj);
var newObj = JsonConvert.DeserializeObject<T>(objStr);
3.Another 方式将需要强力编码,但您可以获得最后一点性能增益。您可以只创建一个新对象,然后手动分配所有属性。
对象的序列化和反序列化是克隆对象的一种选择。
public static T Clone<T>(this T source)
{
var serialized = JsonConvert.SerializeObject(source);
return JsonConvert.DeserializeObject<T>(serialized);
}
然后克隆所需的对象;
var obj = new SampleClass
{
Id = 1,
Name = ""
};
var clonedObj = obj.Clone();
我已添加的列表项根据当前对象 (obj) 值进行更新。 如何使列表不更新或如何复制对象?
public static void ReadData<T>(string filename, T obj,string node)
{
var xmlDocument = new XmlDocument();
xmlDocument.Load(filename);
List<T> objectList = new List<T>();
XmlNodeList xmlNodeList = xmlDocument.SelectNodes("//"+node);
for (var i = 0; i < xmlNodeList?.Count; i++)
{
var j = 0;
foreach (var objectProperty in obj.GetType().GetProperties())
{
if (objectProperty.CanRead)
{
object value;
if (objectProperty.PropertyType == typeof(bool))
{
value = bool.Parse(xmlNodeList[i].ChildNodes[j].InnerText);
}
else
{
value= xmlNodeList[i].ChildNodes[j].InnerText;
}
objectProperty.SetValue(obj, value);
j++;
}
}
objectList.Add(obj);
}
}
1.You可以实现IConeable
public class ClonableClass : ICloneable
{
public object Clone()
{
return this.MemberwiseClone();
}
}
现在a和b指的不是同一个对象。
var a = new ClonableClass ();
var b = (ClonableClass)a.Clone();
2.The 深度克隆的最简单方法是序列化对象然后反序列化它。
var objStr= JsonConvert.SerializeObject(obj);
var newObj = JsonConvert.DeserializeObject<T>(objStr);
3.Another 方式将需要强力编码,但您可以获得最后一点性能增益。您可以只创建一个新对象,然后手动分配所有属性。
对象的序列化和反序列化是克隆对象的一种选择。
public static T Clone<T>(this T source)
{
var serialized = JsonConvert.SerializeObject(source);
return JsonConvert.DeserializeObject<T>(serialized);
}
然后克隆所需的对象;
var obj = new SampleClass
{
Id = 1,
Name = ""
};
var clonedObj = obj.Clone();