gpt4 book ai didi

c# - 反射 - 对象比较和默认值

转载 作者:行者123 更新时间:2023-11-30 22:19:43 37 4
gpt4 key购买 nike

我正在尝试比较 C# 中的两个复杂对象,并生成一个包含两者之间差异的字典。

如果我有这样的类(class):

public class Product
{
public int Id {get; set;}
public bool IsWhatever {get; set;}
public string Something {get; set;}
public int SomeOtherId {get; set;}
}

还有一个例子,因此:

var p = new Product
{
Id = 1,
IsWhatever = false,
Something = "Pony",
SomeOtherId = 5
};

还有一个:

var newP = new Product
{
Id = 1,
IsWhatever = true
};

为了区分它们之间的区别,我正在做的事情包括:

var oldProps = p.GetType().GetProperties();
var newProps = newP.GetType().GetProperties();

// snip
foreach(var newInfo in newProps)
{
var oldVal = oldInfo.GetValue(oldVersion, null);
var newVal = newInfo.GetValue(newVersion,null);
}

// snip - some ifs & thens & other stuff

感兴趣的是这一行

var newVal = newInfo.GetValue(newVersion,null);

使用上面的示例对象,此行将为我提供 SomeOtherId 的默认值 0(bools & DateTimes & whathaveyou 的情况相同)。

我正在寻找的方法是让 newProps 仅包含对象中明确指定的属性,因此在上面的示例中,IdIsWhatever。我试过 BindingFlags 但无济于事。

这可能吗?有没有更清洁/更好的方法,或者有什么工具可以帮我省去麻烦?

谢谢。

最佳答案

没有标志告诉您是否显式设置了属性。您可以做的是将您的属性声明为可为 null 的类型并将值与 null 进行比较。

关于c# - 反射 - 对象比较和默认值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15412512/

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