从枚举打印工作日

时间:2016-10-28 14:16:01

标签: c#

重新编程我的问题可能看起来有点基本,我想要的是使用循环或其他方式打印枚举中提到的所有日子。 我已经使用了一个控制台应用程序。我们非常感谢提高C#语言编码能力基础知识的提示以及答案。

using System;

namespace _28_11_2016_enum
{
class Program
{
    static void Main(string[] args)
    {
        weekdays wd = weekdays.mon;

        for (int i = 0; i < 7; i++)
        {


            int a = (int)wd;
            a = a + i;
            wd = (wd)a;// faulty code.
            Console.WriteLine(wd);
        }
        Console.Read();
    }
    enum weekdays : int
    {
        mon, tue, wed, thur, fri, sat, sun
    }
}

}

4 个答案:

答案 0 :(得分:2)

您不必循环 - Enum.GetNames返回名称,string.Join将它们连接成一个string

 // mon, tue, wed, thur, fri, sat, sun
 Console.Write(string.Join(", ", Enum.GetNames(typeof(weekdays))));

如果您想要int值:

 // 0, 1, 2, 3, 4, 5, 6
 Console.Write(string.Join(", ", Enum.GetValues(typeof(weekdays)).Cast<int>()));

修改:如果您坚持循环我建议 foreach 一个:

 // mon == 0 ... sun == 6
 foreach (var item in Enum.GetValues(typeof(weekdays))) {
   Console.WriteLine($"{item} == {(int) item}"); 
 }

for loop

 // do not use magic numbers - 0..7 but actual values weekdays.mon..weekdays.sun 
 for (weekdays item = weekdays.mon; item <= weekdays.sun; ++item) {
   Console.WriteLine($"{item} == {(int) item}"); 
 } 

但是,在实际应用中,请使用标准DayOfWeek enum

编辑2 :您自己的代码(问题中的)改进了:

 static void Main(string[] args) {
   for (int i = 0; i < 7; i++) { // do not use magic numbers: what does, say, 5 stand for?
     // we want weekdays, not int to be printed out
     weekdays wd = (weekdays) i;

     Console.WriteLine(wd);
   }

   Console.Read();
 }

编辑3 :您自己的代码(在答案中)得到了改进:

 // you have to do it just once, that's why pull the line off the loop 
 string[] s = Enum.GetNames(typeof(weekdays));

 // do not use magic numbers - 7: what does "7" stands for? - 
 // but actual value: s.Length - we want to print out all the items
 // of "s", i.e. from 0 up to s.Length    
 for (int i = 0; i < s.Length; i++)
   Console.WriteLine(s[i]);

答案 1 :(得分:1)

wd = (wd)a;// faulty code.

演员表的语法是(Type)variable。所以它应该是

wd = (weekdays)a;

答案 2 :(得分:1)

您可以这样做:

foreach (var weekDay in Enum.GetNames(typeof(weekDays)))
{
    Console.WriteLine(weekDay);
}

虽然我们正在讨论这个问题,但是,让我在C#中为您提供一些命名/样式约定的提示。

enum的名称应该使用PascalCase:

enum WeekDays : int

一般情况下,您希望以单数形式致电enum

enum WeekDay : int

int派生也是多余的:

enum WeekDay

enum成员名称也应该用PascalCase编写。为了提高可读性,您可能希望使用全名而不是缩写,并将它们分开写入:

enum WeekDay
{
    Monday,
    Tuesday,
    Wednesday,
    Thursday,
    Friday,
    Saturday,
    Sunday
}

当然,如果您决定遵循这些,那么第一个代码段将变为:

foreach (var weekDay in Enum.GetNames(typeof(WeekDay)))
{
    Console.WriteLine(weekDay);
}

答案 3 :(得分:0)

我使用循环重写了第一个代码段,如Dmitry

所示
for (int i = 0; i < 7; i++)
        {

            string[]s = Enum.GetNames(typeof(weekdays));
            Console.WriteLine(s[i]);
        }