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邓纳威:是的,这是一个例子,无论如何我已经更新了。谢谢你简单地回答了我的问题。这是我害怕的,但我还是想检查一下。