将字符串值转换为枚举值C#

时间:2010-12-30 15:41:22

标签: c# .net-3.5 enums casting

我有一个课程MyClass,其中有

public enum Days{Mon, Tue, Wed}

然后是一个字段

public Days dayOfWeek;

我的解决方案中的另一个类的字符串(myString)值为012。我想设置MyClass的{​​{1}})字段myClassInstance等于dayOfWeek的实例,myStringvalue表示Mon,0意思是星期二......

我试过了

1

myClassInstance.dayOfWeek = Convert.ToInt32(myString)
但是没有工作。我确信这很简单。为什么这些技术不起作用?

7 个答案:

答案 0 :(得分:9)

尝试

string s = "0";
Days day = (Days)Enum.Parse(typeof(Days), s);

string s = "0";
Days day;
if(!Enum.TryParse(s, out day)) {
    // error handling
}

优雅地处理无法将s解析为Days实例的情况。

这适用于Enum.Parse的文档

  

名称的字符串表示形式或一个或多个枚举常量的数值转换为等效的枚举对象

此外,您可以检查string的实例是否实际上表示枚举通过

定义的值
string s = "3";
bool defined = Enum.IsDefined(typeof(Days), s);
// defined is false
在这种情况下,

Enum.Parse将盲目地解析s,即使它不代表枚举Days定义的值和Enum.Parse结果中的强制转换到Days不会失败。

此外,还有一个代表星期几的内置枚举。这个枚举是System.DayOfWeek。我建议使用它。

最后,如果由于某种原因您无法使用System.DayOfWeek,则至少应将您的枚举重命名为Day而不是Days(删除复数)。只有表示标志的枚举应该是复数。请注意,上面的变量day代表一天,并不代表天数。这就是你应该将枚举重命名为Day的原因。这与大多数C#和.NET程序员使用的naming conventions一致。

答案 1 :(得分:6)

转换后,您只需将int转换为Days枚举:

myClassInstance.dayOfWeek = (Days)Convert.ToInt32(myString);

您还可以使用Enum.TryParse(如果您使用的是.NET 4)或Enum.Parse。根据您对传入数据的信任程度,您可能还需要调用Enum.IsDefined以确保整数的有效值为Days(否则,在所有这些情况下,您将拥有Days的实例,与您的任何命名值都不对应。)

Days dayOfWeek;
if (!Enum.TryParse(myString, out dayOfWeek)) {
    dayOfWeek = Days.Mon; // or some other default, or throw
}

myClassInstance.dayOfWeek = dayOfWeek;

或者

myClassInstance.dayOfWeek = (Days)Enum.Parse(typeof(Days), myString);

此外,正如其他人所提到的,如果匹配您真正想要的内容,您可能需要考虑使用内置的DayOfWeek枚举而不是自定义版本。

此外,正如其他人再次提到的,即使它没有提到,Day是基于.NET命名准则的更好的名称,因为它不是Flags枚举。

答案 2 :(得分:2)

尝试

myClassInstance.dayOfWeek = (Days)int.Parse(myString);

您知道已经有一个可以重新使用的枚举名为DayOfWeekhttp://msdn.microsoft.com/en-us/library/system.dayofweek.aspx

答案 3 :(得分:2)

尝试:

Days d = (Days)Enum.Parse(typeof(Days), myString);

更完整的示例是here

答案 4 :(得分:0)

您需要将int转换为Days

myClassInstance.dayOfWeek = (Days)Convert.ToInt32(myString);

答案 5 :(得分:0)

你想要做的是将字符串转换为int(如果你想以一种很好的方式做到的话,可以使用tryparse)

然后使用以下代码设置枚举值:

(Days)Enum.ToObject(typeof(Days),intValue);

答案 6 :(得分:0)

这应该有效

myClassInstance.dayOfWeek = Enum.Parse(typeof(Days), myString);

Enump.Parse