gpt4 book ai didi

c# - 将一个对象复制到另一个对象,但只能使用相同的字段

转载 作者:太空宇宙 更新时间:2023-11-03 19:34:39 24 4
gpt4 key购买 nike

我想将一个对象复制到另一个对象,并复制具有相同名称和类型的字段。也许使用反射。

例如

object1.Name = object2.Name;object1.Age = object2.Age;

但是,如果 object2.Address 不在 object1 中,那么它将被忽略,反之亦然。

最佳答案

我回答过类似的问题here .区别在于您希望 from 和 to 具有不同的类型,并按名称和类型匹配属性。这并不难。

我还没有测试过这个 - 但试一试

public static class ExtensionMethods
{
public static void CopyPropertiesTo<T, U>(this T source, U dest)
{
var plistsource = from prop1 in typeof(T).GetProperties() where prop1.CanRead select prop;
var plistdest = from prop2 in typeof(U).GetProperties() where prop2.CanWrite select prop;

foreach (PropertyInfo destprop in plistdest)
{
var sourceprops = plistsource.Where((p) => p.Name == destprop.Name &&
destprop.PropertyType.IsAssignableFrom(p.GetType()));
foreach (PropertyInfo sourceprop in sourceprops)
{ // should only be one
destprop.SetValue(dest, sourceprop.GetValue(source, null), null);
}
}
}
}

如果您不喜欢扩展方法,您可以将其重写为 public static void CopyPropertiesTo(object source, object dest);

这应该让你做这样的事情:

Foo foo = new Foo();
Bar bar = GetBar();
bar.CopyPropertiesTo<Bar, Foo>(foo);

关于c# - 将一个对象复制到另一个对象,但只能使用相同的字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2587814/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com