C# 我是否可以将枚举添加到现有的.NET结构中,如Date?
因此,很明显,微软的日期结构中没有月份枚举。C# 我是否可以将枚举添加到现有的.NET结构中,如Date?,c#,.net,vb.net,enums,extension-methods,C#,.net,Vb.net,Enums,Extension Methods,因此,很明显,微软的日期结构中没有月份枚举。 我想知道的是,是否可以创建一个枚举并将其附加到DateTime结构?扩展方法立即浮现在我的脑海中,但我不知道如何使用它们来实现这一点 Dim july As DateTime.Months = DateTime.Months.July Public Enum Months January = 1 February = 2 March = 3 April = 4 May = 5 June = 6
我想知道的是,是否可以创建一个枚举并将其附加到DateTime结构?扩展方法立即浮现在我的脑海中,但我不知道如何使用它们来实现这一点
Dim july As DateTime.Months = DateTime.Months.July
Public Enum Months
January = 1
February = 2
March = 3
April = 4
May = 5
June = 6
July = 7
August = 8
September = 9
October = 10
November = 11
December = 12
End Enum
有人对此有什么想法吗
更新:
我没有尝试获取当前月份或给定日期的月份名称。我知道怎么做。我只是尝试创建一个具有Month属性的类,并希望使用枚举来表示月份。因为这似乎是一个在其他地方可能有用的项目,所以我不喜欢将枚举放入我的类中,而是希望它“定位”在与它直接相关的结构中,以便很容易找到它。
谢谢你的回复。我应该更清楚地知道我想做什么。你不能像那样向现有类型添加属性 但是,您可以添加一个将从整数转换为相应枚举值的函数,或者只返回对应于月份的枚举值。扩展方法存根:
public static class DateTimeExtensions
{
public static string GetMonthName(this DateTime dateTime)
{
// add using System.Globalization;
return DateTimeFormatInfo.GetMonthName(dateTime.Month);
}
public static Months GetMonth(this DateTime dateTime)
{
return (Months)dateTime.GetMonthName();
}
}
用途:
DateTime mydate = dateTime.Now;
string month = mydate.GetMonthName();
Months name = mydate.GetMonth();
您可以添加如下扩展:
public static class DateTimeExtension
{
public static Months GetMonth(this Date dt)
{
return (Months)dt.Month;
}
public static Months GetMonthStr(this Date dt)
{
return ((Months)dt.Month).ToString();
}
}
将枚举“附加”到结构上意味着什么?现在还不清楚你想达到什么目的。你不能把DateTime看成是一种结构来延长它。你不需要。Months十月=(Months)DateTime.Now.Month可以工作。当然,已经有ToString函数可以精确地执行此操作,所以这有点毫无意义。@JonSkeet:他的意思是他想让自己的
Months
enum嵌套在DateTime
类中,这样他就可以使用代码示例第一行中的语法。你为什么要这样做?将整数月数转换为名称有很多方法。当然,月份的名称取决于文化。内部使用的名称来自哪种文化并不重要(它们仅在代码中),贵格会教徒和其他一些不守旧的新教徒使用1、2、3(有时使用“第一个月”、“第二个月”)来避免使用基于罗马异教的英文名称。因此,代码使用的数字已经是一组英语用户使用的名称。问题已经解决了!;)<代码>返回(月)日期时间.Month@Oded:如果这样的枚举存在并且返回值应该是MonthEnum
,那么您的GetMonth方法似乎只会在存在的情况下返回任何内容January@Chris邓纳威:是的,这是一个例子,无论如何我已经更新了。谢谢你简单地回答了我的问题。这是我害怕的,但我还是想检查一下。