gpt4 book ai didi

.net - 我应该创建一个 DateRange 对象吗?

转载 作者:行者123 更新时间:2023-12-03 05:39:40 25 4
gpt4 key购买 nike

我的一些域对象包含日期范围作为一对开始和结束日期属性:

public class Period {
public DateTime EffectiveDate { get; set; }
public DateTime ThroughDate { get; set; }
}

public class Timeline {
public DateTime StartDate { get; set; }
public DateTime EndDate { get; set; }
}

我发现自己有很多这样的事情:

abstract public int Foo(DateTime startDate, DateTime endDate);
abstract public decimal Bar(DateTime startDate, DateTime endDate);
abstract public ICollection<C5.Rec<DateTime, DateTime>> FooBar(DateTime startDate, DateTime endDate);

最后一个让我想知道......我应该实现 DateRange 类吗?我不知道 BCL 中有这样一个。

根据我的经验,使对象层次结构更深通常会使事情变得复杂。这些对象确实会发送到由 ReportViewer 控件显示的 RDLC 报告,但这是次要的。我会将 View 弯曲到模型,而不是相反。不过,我们不受属性名称的约束,并且愿意做出妥协,例如:

public class DateRange {
public DateTime StartDate { get; set; }
public DateTime EndDate { get; set; }
}

Period p = new Period();
DateTime t = p.EffectiveDateRange.StartDate;

DateRange 类的一个好处是集中验证开始日期之后的结束日期,并且它将简化我的方法签名:

abstract public int Foo(DateRange dateRange);
abstract public decimal Bar(DateRange dateRange);
abstract public ICollection<DateRange> FooBar(DateRange dateRange);

我只是不确定 DateRange 类不会给我带来比它的值(value)更多的麻烦。意见?

附带问题:我是否错过了 BCL 中某处的通用通用元组类?我知道在不同的命名空间中存在着一些非常具体的东西。用 C5 类型污染我的公共(public)域方法签名感觉非常非常肮脏。

最佳答案

不,您没有错过通用类(class)。

我有一个 Range 类型 MiscUtil您可能对此感兴趣 - 它确实可以进行简单的 DateTime 操作。引用马克的回答,我不记得这是一个结构还是一个类 - 当然欢迎您更改它。

由于 Marc 的泛型恶作剧,单步执行起来很好而且很容易(至少假设您使用的是 .NET 3.5 - 在 2.0 中是可行的,但目前不支持);

Range<DateTime> range = 19.June(1976).To(DateTime.Today);

foreach (DateTime date in range.Step(1.Days())
{
// I was alive in this day
}

(这还使用了一堆扩展方法 - 对于测试比生产更有用。)

为了解决 Marc 回答中的另一点,Noda Time肯定能够比 .NET API 更恰本地表达日期的概念,但我们目前没有类似范围之类的东西...不过这是一个好主意 - 我添加了一个 feature request .

关于.net - 我应该创建一个 DateRange 对象吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1845493/

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