【问题标题】:Get the number of the current weekday in ASP.NET Core获取 ASP.NET Core 中当前工作日的编号
【发布时间】:2021-06-14 13:48:41
【问题描述】:

我需要获取当前周的当前工作日编号。

如果我使用DateTime.Now.DayOfWeek,我会得到Monday,但如果我得到周一的17Sunday 等等,使用起来会更容易。提前谢谢!

【问题讨论】:

标签: c# asp.net-core razor


【解决方案1】:

你可以用这个:

day1 = (int)DateTime.Now.DayOfWeek;

【讨论】:

    【解决方案2】:

    您可以创建一个扩展方法来隐藏实现细节。

    使用扩展方法并将T 限制为IConvertible 可以解决问题,但as of C# 7.3 Enum is an available constraint type

    public static class EnumExtensions
    {
        public static int ToInt<T>(this T source) where T : Enum
        {
            return (int) (IConvertible) source;
        }
    }
    

    这允许你写:

    DateTime.Now.DayOfWeek.ToInt();
    

    例子:

    Console.WriteLine(DayOfWeek.Monday.ToInt()); // outputs 1
    

    注意:此解决方案假定 int 用作底层 Enum 类型。

    【讨论】:

      【解决方案3】:

      DateTime.Now.DayOfWeek 是一个枚举,它是 (int) 类型,所以最简单的方法是 @faheem999 的答案。 但是,如果您正在处理未知类型的 Enum,例如(byte , sbyte , short , ushort , int , uint , longulong),那么您需要知道 Enum 类型,或者使用其他方法:

      DayOfWeek dayOfWeek = DateTime.Now.DayOfWeek;
      object val = Convert.ChangeType(dayOfWeek, dayOfWeek.GetTypeCode());
      

      更多信息,看这个问题Get int value from enum in C#

      【讨论】:

      • 此方法是否适用于所有类型或有例外?对象“val”会是星期几吗?在我的项目中,我将一周中的天数与数据库 ID (int) 进行比较。我可以将对象与 int 进行比较吗?
      • 该方法,返回一个指定类型的对象,其值与指定对象等价。在这种情况下,因为dayOfWeek.GetTypeCode() 返回 int(因为 DateTime.Now.DayOfWeek 是一个枚举,并且它是 (int) 类型) object val 将变为 int。如果您在那里放置另一种类型,它将转换为指定的类型。但是,它无法将其他类型转换为枚举值,即使源类型是枚举的基础类型。更多信息,Convert.ChangeType
      猜你喜欢
      • 2016-12-09
      • 2012-04-01
      • 2011-03-31
      • 2020-03-24
      • 2018-10-03
      • 1970-01-01
      • 2016-08-07
      • 1970-01-01
      相关资源
      最近更新 更多