C# 强制在datetime上指定一周中的某一天

C# 强制在datetime上指定一周中的某一天,c#,datetime,C#,Datetime,我正在编写一个asp.net web应用程序,希望用户能够选择支付期的结束时间 发薪期总是在星期六结束 我正在使用日历控件,并为其提供了一个onSelectionChanged事件处理程序,如下所示: protected void forceSaturdaySelection (object sender, EventArgs e) { Weekending.SelectedDate = Weekending.SelectedDate.AddDays(DayOfW

我正在编写一个asp.net web应用程序,希望用户能够选择支付期的结束时间

发薪期总是在星期六结束

我正在使用日历控件,并为其提供了一个onSelectionChanged事件处理程序,如下所示:

    protected void forceSaturdaySelection (object sender, EventArgs e)
    {
        Weekending.SelectedDate = Weekending.SelectedDate.AddDays(DayOfWeek.Saturday - Weekending.SelectedDate.DayOfWeek);
    }
这段代码是有效的,因为我希望web应用程序选择用户选择的支付期结束日期,无论他们选择的是一周中的哪一天


我的问题是,有没有更具可读性的方法呢?

没有。。。但这不会阻止你自己去做!创建一个扩展方法。。或者简单地调用另一个方法:

private DateTime getPayPeriodEnding(DateTime selectedDate) {
    return selectedDate.AddDays(DayOfWeek.Saturday - selectedDate.DayOfWeek);
}
扩展方法版本:

public static DateTime NextPayPeriodEndDate(this DateTime selectedDate) {
    return selectedDate.AddDays(DayOfWeek.Saturday - selectedDate.DayOfWeek);
}
然后,您的代码变为:

WeekEnding.SelectedDate = getPayPeriodEnding(WeekEnding.SelectedDate);
或者


这确实使它更具可读性,这正是我所要求的。也就是说,我不认为一个线性函数需要将它的内容发送到一个不同的方法,因为它只在一个位置执行。我不同意。从中获得的可读性收益是显而易见的。需要30秒才能意识到代码的作用。。但是一个命名良好的方法调用可以在非常短的时间内被读取和理解。与代码大小相比,更倾向于可读性。函数名是否已经提供了相同的可读性级别?我可以把它改为说一些关于支付期结束的事情,而不是周六,但我也看不出这有什么帮助。不是真的没有。活动是代码其余部分的“入口点”。。它的名称应该描述刚刚发生的事情(例如,“PayPeriodDateSelected”)。而查找下一个支付期结束日期的方法在您的域中有特定用途。真的由你决定。。我只是想给你另一个观点:)我想这是有道理的。现在,当我查看事件处理程序的标题时,我注意到该方法的名称与参数不太匹配。我可能应该将该方法的名称更改为事件名称,并将其逻辑委托给一个函数,该函数使用与该方法标题相关的参数。谢谢你的帮助。
WeekEnding.SelectedDate = WeekEnding.SelectedDate.NextPayPeriodEndDate();