【问题标题】:Displaying enum in the console C#在控制台 C# 中显示枚举
【发布时间】:2015-02-12 02:46:03
【问题描述】:

我有一个任务,我必须得到一个日期,然后以不同的格式显示它(MM/DD/YYYY、DD/MM/YYYY、YYYY 月份的 DD 等等......)。月份必须是枚举,我必须在单独的课程中进行 Date。我首先尝试使用switch 将枚举转换为字符串,但总是在我从控制台解析数字时出现错误。 代码如下:

enum Month { January = 1, Fabruary, March, April, May, June, July,August, September, October,
十一月,十二月}

class Date
{
    private int m_Day, m_Year;
    private Month m_Month;
    
    public Date(int day, Month month, int year)
    {
        this.m_Day = day;
        this.m_Month = month;
        this.m_Year = year;
    }
    public void Print()
    {
        string month = "";
        Console.WriteLine(PrintMonth(month));
    }
    public string PrintMonth(string month)
    {
        int x = (int)Month;
        switch (x)
        {
            case 1:
                month = "January";
                break;
            case 2:
                month = "Fabruary";
                break;
            case 3:
                month = "March";
                break;
            case 4:
                month = "April";
                break;
        }
        return month;
    }
    public int Day
    {
        get { return m_Day; }
        set { if(Day>=0&&Day<=31)m_Day = value; }
    }
    public Month Month
    {
        get { return m_Month; }
        set { if (Month >= Month.January && Month <= Month.December)m_Month = value; }
    }
    public int Year
    {
        get { return m_Year; }
        set { m_Year = value; }
    }
}

这就是Main

static void Main(string[] args)

  {
        int m_Day=0, m_Year=0;
        Month m_Month=0;
        Date date = new Date(m_Day,m_Month,m_Year);
        int month = int.Parse(Console.ReadLine());
        m_Month = (Month)month;
        date.PrintMonth(m_Month);
    }

【问题讨论】:

  • 究竟是什么错误?在哪条线上?
  • 表示错误在这一行date.PrintMonth(m_Month);
  • 该方法采用string。你给它一个enum

标签: c# enums


【解决方案1】:

你只需要写枚举值:

enum Month
{
    January=1,
    February=2
}
static void Main(string[] args)
{
    Console.WriteLine(((Month)1));
}

因此您的 PrintMonth 可以采用 int 或 Month 值,枚举的 ToString() 返回其字符串表示形式。

【讨论】:

    【解决方案2】:
      m_Month = (Month)month;
            date.PrintMonth(m_Month.ToString());
    

    但它不是正确的实施方式。您应该使用 Enum.Parse 或 Enum.TryParse 并使用 (int)Enum 获取整数值并使用 Enum.ToString() 获取字符串值

    【讨论】: