gpt4 book ai didi

c# - 创建一个表示两个其他对象之间的值差异的对象

转载 作者:太空宇宙 更新时间:2023-11-03 18:33:53 26 4
gpt4 key购买 nike

假设有以下类:

public class MyEntity
{
public string FirstName;
public string LastName;
}

我想比较 MyEntity 的两个实例,并创建一个新的 MyEntity 实例,它只包含另外两个实例之间的值差异。相等的属性将在新对象中产生一个 null 值。

例如,我想要以下代码:

MyEntity entity1 = new MyEntity() { FirstName = "Jon", LastName = "Doh" };
MyEntity entity2 = new MyEntity() { FirstName = "Jon", LastName = "The Great" };
MyEntity diffEntity = CreateDiffEntity(entity1, entity2); // TODO

产生以下 diffEntity 值:

{
FirstName: null,
LastName: "The Great"
}

我们可以假设所有属性都可以为空。

如果值不匹配,新对象应包含第二个对象的属性值。

请假设我有多种类型的实体,具有不同的属性定义
所以我需要一个解决方案,它可以用于 MyEntity 以外的其他类类型,并且在将新属性添加到类时不需要更改。

最终目标是使客户端移动应用程序能够将仅包含对实体所做更改的 DTO 发送到 ASP.NET MVC WebAPI 服务器应用程序。

如何正确地做到这一点?

最佳答案

您可以使用反射来解决这个问题。它的基本要点是:

    public void Compare(object first,object second, object result)
{
Type t = first.GetType();
PropertyInfo[] propertyInfoList = t.GetProperties();

foreach (PropertyInfo propertyInfo in propertyInfoList)
{
object value1= propertyInfo.GetValue(first, null);
object value2 = propertyInfo.GetValue(second, null);

if (value1 != value2)
{
propertyInfo.SetValue(result, value1, null);
}
else
{
propertyInfo.SetValue(result, null, null);
}

}
}

然后像这样使用它:

MyType result = new MyType();
Compare(object1,object2, result);

它可以用作您的一个实体的扩展方法或成员。

关于c# - 创建一个表示两个其他对象之间的值差异的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18342146/

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