我可以在现有的.NET结构中添加枚举,比如Date吗?

时间:2011-10-26 13:59:52

标签: 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
    July = 7
    August = 8
    September = 9
    October = 10
    November = 11
    December = 12
End Enum

有人对此有任何想法吗?

更新: 我不是要获取当前月份或给定日期的月份名称。我知道该怎么做。我只是想创建一个具有Month属性的类,并希望使用Enum来表示月份。由于这似乎是一个可以在其他地方使用的项目,我讨厌将Enum放入我的班级,而宁愿让它“定位”在与其直接相关的结构中,以便可以轻松找到它。 谢谢你的回复。我应该更清楚地了解我想做什么。

3 个答案:

答案 0 :(得分:7)

您无法向现有类型添加属性。

但是,您可以添加将从整数转换为相应枚举值的extension method,或者只返回与月份对应的枚举值。

答案 1 :(得分:3)

扩展方法存根:

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();

答案 2 :(得分:3)

你可以添加这样的扩展名:

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();
    }
}