C# 枚举可以表示字符串数吗?
我希望用户输入“Sun”并使其表示“1” enum可以这样做吗?是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
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); }
}