【发布时间】:2021-06-14 13:48:41
【问题描述】:
我需要获取当前周的当前工作日编号。
如果我使用DateTime.Now.DayOfWeek,我会得到Monday,但如果我得到周一的1,7 的Sunday 等等,使用起来会更容易。提前谢谢!
【问题讨论】:
-
这能回答你的问题吗? Get int value from enum in C#
标签: c# asp.net-core razor
我需要获取当前周的当前工作日编号。
如果我使用DateTime.Now.DayOfWeek,我会得到Monday,但如果我得到周一的1,7 的Sunday 等等,使用起来会更容易。提前谢谢!
【问题讨论】:
标签: c# asp.net-core razor
你可以用这个:
day1 = (int)DateTime.Now.DayOfWeek;
【讨论】:
您可以创建一个扩展方法来隐藏实现细节。
使用扩展方法并将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 类型。
【讨论】:
DateTime.Now.DayOfWeek 是一个枚举,它是 (int) 类型,所以最简单的方法是 @faheem999 的答案。
但是,如果您正在处理未知类型的 Enum,例如(byte , sbyte , short , ushort , int , uint , long 或 ulong),那么您需要知道 Enum 类型,或者使用其他方法:
DayOfWeek dayOfWeek = DateTime.Now.DayOfWeek;
object val = Convert.ChangeType(dayOfWeek, dayOfWeek.GetTypeCode());
更多信息,看这个问题Get int value from enum in C#
【讨论】:
dayOfWeek.GetTypeCode() 返回 int(因为 DateTime.Now.DayOfWeek 是一个枚举,并且它是 (int) 类型) object val 将变为 int。如果您在那里放置另一种类型,它将转换为指定的类型。但是,它无法将其他类型转换为枚举值,即使源类型是枚举的基础类型。更多信息,Convert.ChangeType