C# 枚举可以表示字符串数吗?

C# 枚举可以表示字符串数吗?,c#,C#,我希望用户输入“Sun”并使其表示“1” enum可以这样做吗?是 enum Days { Sun = 1, /*...*/ } string day = Console.ReadLine(); Days d = (Days)Enum.Parse(typeof(Days), day); 是-您可以使用(从.NET 4开始)将字符串解析为枚举值: Day day = (Day) Enum.Parse(typeof(Day), "Sun"); 或 或 Day; if(Enums.TryPar

我希望用户输入“Sun”并使其表示“1”

enum可以这样做吗?

enum Days { Sun = 1, /*...*/ }

string day = Console.ReadLine();

Days d = (Days)Enum.Parse(typeof(Days), day);
是-您可以使用(从.NET 4开始)将字符串解析为枚举值:

Day day = (Day) Enum.Parse(typeof(Day), "Sun");

Day;
if(Enums.TryParseName(“Sun”,out day))
{
//成功!
}

无强制转换,并且不能意外地在非枚举类型上使用它。(当然,项目中还有其他各种好处……描述解析等)

如果您有一个
enum
,可以说:

enum SkyObjects
{
   Sun = 1,
   Star = 2
}
然后,您可以获得以下内容:

SkyObjects day = Enum.Parse(typeof(SkyObjects ), Console.ReadLine());

这将有
Sun
,表示为
1
,如您所愿。

或,。。。不可变值类型结构的另一个候选对象,该结构“显示为”且“行为”类似于枚举,但根据域模型的要求具有额外的功能。。。使用下面定义的类型,您可以编写

 var myDay = (InPutDay)"Sunday"; 
或者

 int x = (int)InPutDay.Sun;
或者

intx=(int)InputDay.Parse(“星期日”)

使用此类型:

   public struct InPutDay
   {
       private int val;
       private bool isDef;
       private InPutDay( )  { } // private to prevent direct instantiation 
       private InPutDay(int value) { id=value; isDef = true; } 

       public bool HasValue { get { return isDef; } } 
       public bool isNull{ get { return !isDef; } } 

       public static InPutDay Null = new InPutDay(); 
       public static InPutDay Sun = new InPutDay(1); 
       public static InPutDay Mon = new InPutDay(2); 
       public static InPutDay Tue = new InPutDay(3); 
       public static InPutDay Wed = new InPutDay(4); 
       public static InPutDay Thu = new InPutDay(5); 
       public static InPutDay Fri = new InPutDay(6); 
       public static InPutDay Sat = new InPutDay(7); 

       public static InPutDay Parse(string s)
       {
           switch (s.ToUpper().Substring(0,3))
           {
               case "SUN": return InPutDay.Sun;
               case "MON": return InPutDay.Mon;
               case "TUE": return InPutDay.Tue;
               case "WED": return InPutDay.Wed;
               case "THU": return InPutDay.Thu;
               case "FRI": return InPutDay.Fri;
               case "SAT": return InPutDay.Sat;
               default return InPutDay.Null;
           }
       }
       public static implicit operator int(InPutDay inDay)
       { return val; }
       public static explicit operator InPutDay (int inDay)
       { 
           if (inDay > 0 && inDay < 8)
              return new InPutDay(inDay);
           // either throw exception ....
           throw new ArgumentException(
               "InPutDay integer values must be between 1 and 7.");
           // or return null instance
           return InPutDay.Null;
       }
       public static explicit operator InPutDay (string inDayName)
       {  return InPutDay.Parse(inDayName); }               
  }
public struct InPutDay
{
私人国际旅行社;
私人bool-isDef;
private InPutDay(){}//private以防止直接实例化
私有InPutDay(int值){id=value;isDef=true;}
公共bool HasValue{get{return isDef;}}
公共bool为null{get{return!isDef;}}
public static InPutDay Null=new InPutDay();
公共静态输入日Sun=新输入日(1);
公共静态InPutDay Mon=新InPutDay(2);
公共静态输入日Tue=新输入日(3);
公共静态输入日Wed=新输入日(4);
公共静态输入日Thu=新输入日(5);
公共静态输入日Fri=新输入日(6);
公共静态输入日Sat=新输入日(7);
公共静态InPutDay解析(字符串s)
{
开关(s.ToUpper().Substring(0,3))
{
案例“SUN”:返回InPutDay.SUN;
案例“MON”:返回InPutDay.MON;
案例“TUE”:返回InPutDay.TUE;
案例“WED”:返回InPutDay.WED;
案例“THU”:返回InPutDay.THU;
案例“FRI”:返回InPutDay.FRI;
案例“SAT”:返回InPutDay.SAT;
默认返回InPutDay.Null;
}
}
公共静态隐式运算符int(InPutDay inDay)
{return val;}
公共静态显式运算符InPutDay(int inDay)
{ 
如果(inDay>0&&inDay<8)
返回新输入日(inDay);
//要么抛出异常。。。。
抛出新的ArgumentException(
“InPutDay整数值必须介于1和7之间。”);
//或返回空实例
返回InPutDay.Null;
}
公共静态显式运算符InPutDay(字符串inDayName)
{return InPutDay.Parse(inDayName);}
}

再加上一个纯粹是免费插拔:)当然你的答案是正确的
SkyObjects day = Enum.Parse(typeof(SkyObjects ), Console.ReadLine());
 var myDay = (InPutDay)"Sunday"; 
 int x = (int)InPutDay.Sun;
   public struct InPutDay
   {
       private int val;
       private bool isDef;
       private InPutDay( )  { } // private to prevent direct instantiation 
       private InPutDay(int value) { id=value; isDef = true; } 

       public bool HasValue { get { return isDef; } } 
       public bool isNull{ get { return !isDef; } } 

       public static InPutDay Null = new InPutDay(); 
       public static InPutDay Sun = new InPutDay(1); 
       public static InPutDay Mon = new InPutDay(2); 
       public static InPutDay Tue = new InPutDay(3); 
       public static InPutDay Wed = new InPutDay(4); 
       public static InPutDay Thu = new InPutDay(5); 
       public static InPutDay Fri = new InPutDay(6); 
       public static InPutDay Sat = new InPutDay(7); 

       public static InPutDay Parse(string s)
       {
           switch (s.ToUpper().Substring(0,3))
           {
               case "SUN": return InPutDay.Sun;
               case "MON": return InPutDay.Mon;
               case "TUE": return InPutDay.Tue;
               case "WED": return InPutDay.Wed;
               case "THU": return InPutDay.Thu;
               case "FRI": return InPutDay.Fri;
               case "SAT": return InPutDay.Sat;
               default return InPutDay.Null;
           }
       }
       public static implicit operator int(InPutDay inDay)
       { return val; }
       public static explicit operator InPutDay (int inDay)
       { 
           if (inDay > 0 && inDay < 8)
              return new InPutDay(inDay);
           // either throw exception ....
           throw new ArgumentException(
               "InPutDay integer values must be between 1 and 7.");
           // or return null instance
           return InPutDay.Null;
       }
       public static explicit operator InPutDay (string inDayName)
       {  return InPutDay.Parse(inDayName); }               
  }