这可能是一个简单的问题。假设我有一个名为Users的对象,它包含许多受保护的变量。
在Users类中,我有一个创建临时Users对象的方法,对它做了一些事情,如果成功,将所有变量从临时Users对象传输到我拥有的那个。
是否有一些快速方法可以将所有变量从一个Users对象传输到另一个Users对象而不使用C#进行此操作?
this.FirstName = temp.FirstName;
this.LastName = temp.LastName;
........75 variables later......
this.FavoriteColor = temp.FavoriteColor
答案 0 :(得分:3)
更好的方法是实现IClonable接口。但是你会发现它并没有为你节省很多工作。
答案 1 :(得分:3)
您应该在C#中查看克隆。
答案 2 :(得分:1)
我认为序列化然后反序列化对象将创建一个新的对象实例。这应该与前一个对象相同。
答案 3 :(得分:0)
更好的解决方案可能是移动此类方法不在您的类之外,然后将临时用户对象分配给主用户对象引用,如下所示:
_User = tmpUser;
免费提供75行代码。每当我有一个类在自己的方法中创建自己的实例时,我总是喜欢眨眼几次并确保我真的需要这样做。
答案 4 :(得分:0)
总有反射选项。与此基本相似的东西:
public static void Copy(object source, object target)
{
foreach (System.Reflection.PropertyInfo pi in source.GetType().GetProperties())
{
System.Reflection.PropertyInfo tpi = target.GetType().GetProperty(pi.Name);
if (tpi != null && tpi.PropertyType.IsAssignableFrom(pi.PropertyType))
{
tpi.SetValue(target, pi.GetValue(source, null), null);
}
}
}
不要求源和目标有任何关系,只需要一个名称和一个IsAssignable检查。如果您在任何地方使用引用类型,它会产生有趣的副作用,但对于您刚才描述的情况,这不是一个不错的选择。
class sourceTester
{
public bool Hello { get; set; }
public string World { get; set; }
public int Foo { get; set; }
public List<object> Bar { get; set; }
}
class targetTester
{
public int Hello {get; set;}
public string World { get; set; }
public double Foo { get; set; }
public List<object> Bar { get; set; }
}
static void Main(string[] args)
{
sourceTester src = new sourceTester {
Hello = true,
World = "Testing",
Foo = 123,
Bar = new List<object>()
};
targetTester tgt = new targetTester();
Copy(src, tgt);
//Immediate Window shows the following:
//tgt.Hello
//0
//tgt.World
//"Testing"
//tgt.Foo
//0.0
//tgt.Bar
//Count = 0
//src.Bar.GetHashCode()
//59129387
//tgt.Bar.GetHashCode()
//59129387
}