c# – 比较某些道具具有不同格式的对象

c# – 比较某些道具具有不同格式的对象,第1张

概述比较两个对象的所有属性的最佳方法是什么,其中一些属性具有不同的格式(例如,一个中的DateTime和另一个中的自定义格式的DateTime.ToString())? 我能够通过使用2个断言来做到这一点: o1.ShouldHave().AllPropertiesBut(dto1 => dto1.Date).EqualTo(o2);o1.Date.Should().Be(DateTime.Pars 比较两个对象的所有属性的最佳方法是什么,其中一些属性具有不同的格式(例如,一个中的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的字符串表示依赖于线程的文化,因此它不会给您可预测的结果.但是,如果Convert.ChangeType成功将短日期时间转换回DateTIme对象,我不会感到惊讶.

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

HTH

丹尼斯

@H_403_41@ 总结

以上是内存溢出为你收集整理的c# – 比较某些道具具有不同格式的对象全部内容,希望文章能够帮你解决c# – 比较某些道具具有不同格式的对象所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1234319.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存