gpt4 book ai didi

c# - 比较某些 Prop 具有不同格式的对象

转载 作者:行者123 更新时间:2023-11-30 12:33:34 24 4
gpt4 key购买 nike

比较两个对象的所有属性的最佳方法是什么,其中一些对象具有不同的格式(例如 DateTime 在一个对象中,DateTime.ToString() 在另一个对象中具有自定义格式)?

我能够通过使用 2 个断言来做到这一点:

o1.ShouldHave().AllPropertiesBut(dto1 => dto1.Date).EqualTo(o2);
o1.Date.Should().Be(DateTime.Parse(o2.Date));

我会考虑以下内容,但无法编译,因为 EqualTo<T>()无效。

o1.ShouldHave().AllProperties().But(d => d.Date).EqualTo(o2)
.And.Date.Should().Be((DateTime.Parse(o2.Date));

类型是:

public class Dto1
{
public int ID { get { return 1; } }
public DateTime Date { get { return DateTime.Now.Date; } }
}

public class Dto2
{
public int ID { get { return 1; } }
public string Date { get { return DateTime.Now.Date.ToShortDateString(); } }
}

var o1 = new Dto1();
var o2 = new Dto2();

最佳答案

第一个示例通常是最好的方法。但是,如果您要切换 o1 和 o2,它可能会在一次调用中工作。 Fluent Assertions 将尝试将属性的实际值转换(使用 Convert.ChangeType)为具有相同名称的属性的预期值。在您的特定示例中,它会在比较值之前尝试将 Dto1 中的 DateTime 转换为 Dto2 中的字符串。但由于 DateTime 的字符串表示形式取决于线程的文化,因此它不会为您提供可预测的结果。但是,如果您切换 o1 和 o2,如果 Convert.ChangeType 成功地将您的短日期时间转换回 DateTIme 对象,我不会感到惊讶。

作为旁注,我的 DTO 通常只是将 DateTime 传递给调用者,而不进行任何字符串转换。我相信 DateTime 的实际表示纯粹是 UI 责任。

HTH

丹尼斯

关于c# - 比较某些 Prop 具有不同格式的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9080458/

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