通过在c#中传递一年中的周数来获取一周的第一个日期的更好方法? 我写了下面的方法,把一周的第一个星期,一年又一年的过去,我认为星期一是一周的第一天。我想知道是否有更好的方法来计算这个。这是我的密码 public static DateTime GetFirstDateOfWeekByWeekNumber(int year, int weekNumber) { var date = new DateTime(year, 01, 01); var firstDayOfYear = date.DayOfWeek; var result = date.AddDays(weekNumber * 7); if (firstDayOfYear == DayOfWeek.Monday) return result.Date; if (firstDayOfYear == DayOfWeek.Tuesday) return result.AddDays(-1).Date; if (firstDayOfYear == DayOfWeek.Wednesday) return result.AddDays(-2).Date; if (firstDayOfYear == DayOfWeek.Thursday) return result.AddDays(-3).Date; if (firstDayOfYear == DayOfWeek.Friday) return result.AddDays(-4).Date; if (firstDayOfYear == DayOfWeek.Saturday) return result.AddDays(-5).Date; return result.AddDays(-6).Date; }

通过在c#中传递一年中的周数来获取一周的第一个日期的更好方法? 我写了下面的方法,把一周的第一个星期,一年又一年的过去,我认为星期一是一周的第一天。我想知道是否有更好的方法来计算这个。这是我的密码 public static DateTime GetFirstDateOfWeekByWeekNumber(int year, int weekNumber) { var date = new DateTime(year, 01, 01); var firstDayOfYear = date.DayOfWeek; var result = date.AddDays(weekNumber * 7); if (firstDayOfYear == DayOfWeek.Monday) return result.Date; if (firstDayOfYear == DayOfWeek.Tuesday) return result.AddDays(-1).Date; if (firstDayOfYear == DayOfWeek.Wednesday) return result.AddDays(-2).Date; if (firstDayOfYear == DayOfWeek.Thursday) return result.AddDays(-3).Date; if (firstDayOfYear == DayOfWeek.Friday) return result.AddDays(-4).Date; if (firstDayOfYear == DayOfWeek.Saturday) return result.AddDays(-5).Date; return result.AddDays(-6).Date; },c#,C#,如果要替换该If/else构造,可以使用基础枚举值进行计算。枚举以Sunday=0,Sunday=1开头,因此为了获得基于周一的值,需要将其移动1。您可以通过以下方式执行此操作: int delta = -((int)firstDayOfYear + 6) % 7; // and then just apply the delta return result.AddDays(delta).Date 作为站点注意事项,不要在序列中使用具有相互排斥条件的多个ifs。在您的示例中,如果星期一是Mo

如果要替换该If/else构造,可以使用基础枚举值进行计算。枚举以
Sunday=0
Sunday=1
开头,因此为了获得基于周一的值,需要将其移动1。您可以通过以下方式执行此操作:

int delta = -((int)firstDayOfYear + 6) % 7;

// and then just apply the delta
return result.AddDays(delta).Date

作为站点注意事项,不要在序列中使用具有相互排斥条件的多个
if
s。在您的示例中,如果星期一是
Monday
,则构造仍会根据每个条件检查该值。但是如果您使用了适当的
if/else if/else
结构,那么它只会执行第一次检查,然后跳到最后。使用
switch
语句也可以避免这种情况,因为要执行的分支是在一个步骤中评估的。

获取本周的第一个星期一?看起来@GSerg发布了您要查找的内容。如果你不这样做,你至少应该把它变成一个
开关,而不是所有的
If
s。@MaxPoshusta开关比If好多少?我记得,人们建议避免使用开关箱。你能给我一个论点告诉我switch比if好吗,谢谢?我不知道你为什么要避免
switch/case
。只要让你的代码最具可读性就行了。在您的情况下,它将使用
switch/case
。可能您正在考虑使用
switch/case
进行多态性。那是个糟糕的设计。看见