在c#中从对象中分配一个对象
本文关键字:分配 一个对象 对象 | 更新日期: 2023-09-27 18:10:25
我很想知道是否有一种简单的方法可以做到以下这些。
public class Person
{
public String Name{ get; set; }
public void Load(Stream stream)
{
this = new XmlSerializer(GetType()).Deserialize(stream) as Person;
}
public void Save(Stream stream)
{
new XmlSerializer(GetType()).Serialize(stream, this);
}
}
我意识到这将无法编译;然而,我发现有时我希望从对象本身赋值。(例如,对象经历了巨大的变化,我希望不是改变每个值,而是通过调用其构造函数并将对象设置为新版本来简单地"重置"对象)。
对如何做到这一点有什么想法吗?
你可以用Automapper来做到这一点,它只会将一个实例的内容复制到你的实例中:
public void Load(Stream stream)
{
Mapper.DynamicMap( new XmlSerializer(GetType()).Deserialize(stream) as Person, this );
}
然而,我更喜欢
public static Person Load(Stream stream)
{
return new XmlSerializer(GetType()).Deserialize(stream) as Person;
}
,这样您就可以返回一个新的实例,而不是覆盖内容,并且可以在客户端代码中切换引用。
使用静态方法返回一个新实例:
public class Person
{
public String Name { get; set; }
public static Person Load(Stream stream)
{
return new XmlSerializer(GetType()).Deserialize(stream) as Person;
}
}
这样写:
var person = Person.Load(someStream);
我没有注意到你的要求,这是在一个接口实现。如果可能的话,您可能希望重构设计。如果你不能并且你的对象足够简单,你可以实例化一个新对象并复制成员:
public void Load(Stream stream)
{
Person p = new XmlSerializer(GetType()).Deserialize(stream) as Person;
// todo: copy properties from p to this:
// this.Name = p.Name;
// etc
}