重构其他if语句从周三返回当前周

met*_*lah 0 c# if-statement

我很担心CurrentRentWeek.cs中的代码是否具有面向未来的能力,是否有这么多其他if语句的好习惯?如果没有,重构它的最佳方法是什么?

MainWindow.Xaml.cs

    public MainWindow()
    {
        InitializeComponent();

        // Set current rent week
        var datecheckObject = new CurrentRentWeek();
        CurrentRentWeekTextBlock.Text = datecheckObject.DateCheck(CurrentRentWeekTextBlock.Text);
    }
Run Code Online (Sandbox Code Playgroud)

CurrentRentWeek.cs

    public string DateCheck(string rentWeek)
    {
        if (_today.DayOfWeek == DayOfWeek.Monday)
        {
            _cRentWeekStart = _today.AddDays(-5);
            _cRentWeekEnd = _today.AddDays(2);
            rentWeek = "Current Rent Week: " + _cRentWeekStart.ToString("dd/MM/yyyy") + " - " +
                       _cRentWeekEnd.ToString("dd/MM/yyyy");
        }
        else if (_today.DayOfWeek == DayOfWeek.Tuesday)
        {
            _cRentWeekStart = _today.AddDays(-6);
            _cRentWeekEnd = _today.AddDays(1);
            rentWeek = "Current Rent Week: " + _cRentWeekStart.ToString("dd/MM/yyyy") + " - " +
                       _cRentWeekEnd.ToString("dd/MM/yyyy");
        }
        else if (_today.DayOfWeek == DayOfWeek.Wednesday)
        {
            _cRentWeekStart = _today.AddDays(0);
            _cRentWeekEnd = _today.AddDays(7);
            rentWeek = "Current Rent Week: " + _cRentWeekStart.ToString("dd/MM/yyyy") + " - " +
                       _cRentWeekEnd.ToString("dd/MM/yyyy");
        }
        else if (_today.DayOfWeek == DayOfWeek.Thursday)
        {
            _cRentWeekStart = _today.AddDays(-1);
            _cRentWeekEnd = _today.AddDays(6);
            rentWeek = "Current Rent Week: " + _cRentWeekStart.ToString("dd/MM/yyyy") + " - " +
                       _cRentWeekEnd.ToString("dd/MM/yyyy");
        }
        else if (_today.DayOfWeek == DayOfWeek.Friday)
        {
            _cRentWeekStart = _today.AddDays(-2);
            _cRentWeekEnd = _today.AddDays(5);
            rentWeek = "Current Rent Week: " + _cRentWeekStart.ToString("dd/MM/yyyy") + " - " +
                       _cRentWeekEnd.ToString("dd/MM/yyyy");
        }
        else if (_today.DayOfWeek == DayOfWeek.Saturday)
        {
            _cRentWeekStart = _today.AddDays(-3);
            _cRentWeekEnd = _today.AddDays(4);
            rentWeek = "Current Rent Week: " + _cRentWeekStart.ToString("dd/MM/yyyy") + " - " +
                       _cRentWeekEnd.ToString("dd/MM/yyyy");
        }
        else if (_today.DayOfWeek == DayOfWeek.Sunday)
        {
            _cRentWeekStart = _today.AddDays(-4);
            _cRentWeekEnd = _today.AddDays(3);
            rentWeek = "Current Rent Week: " + _cRentWeekStart.ToString("dd/MM/yyyy") + " - " +
                       _cRentWeekEnd.ToString("dd/MM/yyyy");
        }
        else
        {
            rentWeek = "";
        }
        return rentWeek;
    }
Run Code Online (Sandbox Code Playgroud)

Ser*_*rvy 5

你可以从一个通用函数开始,以获得任何给定日期的星期开始:

public static DateTime StartOfWeek(DateTime date)
{
    while (date.DayOfWeek != DayOfWeek.Wednesday)
        date = date.AddDays(-1);
    return date;
}
Run Code Online (Sandbox Code Playgroud)

然后,您只需调用该方法,添加固定的天数即可到达周末,并为这些日期创建字符串:

public string DateCheck()
{
    var startOfWeek = StartOfWeek(_today);
    var endOfWeek = startOfWeek.AddDays(7);
    return string.Format("Current Rent Week: {0} - {1}",
        startOfWeek.ToString("dd/MM/yyyy"),
        endOfWeek.ToString("dd/MM/yyyy"));
}
Run Code Online (Sandbox Code Playgroud)