繁体   English   中英

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

[英]Casting string value to enumerated value C#

我有一个类MyClass

public enum Days{Mon, Tue, Wed}

然后是一个领域

public Days dayOfWeek;

从在我的解决方案的另一个I类有一个字符串( myString的要么)值012 我想将MyClass (称为myClassInstance )字段dayOfWeek的实例设置为等于myStringvalue这样0表示Mon, 1表示Tue ...

我努力了

myClassInstance.dayOfWeek = Convert.ToInt32(myString)

myClassInstance.dayOfWeek = (int) myString

但都不起作用。 我敢肯定这很简单。 这些技术为什么不起作用?

尝试

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.ParseDays将不会失败。

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

最后,如果由于某种原因您不能使用System.DayOfWeek ,则应至少将枚举重命名为Day而不是Days (除去复数形式)。 仅代表标志的枚举应被复数。 请注意,上面的变量day代表一天,而不代表几天。 这就是为什么您应该将枚举重命名为Day 这与大多数C#和.NET程序员使用的命名约定一致。

您只需将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枚举。

尝试

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

您是否知道已经有一个可以重用的枚举,称为DayOfWeekhttp://msdn.microsoft.com/zh-cn/library/system.dayofweek.aspx

尝试:

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

一个更完整的例子在这里

您需要将intDays

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

您要执行的操作是将字符串转换为int格式(如果想要以一种不错的方式进行操作,则可以尝试使用tryparse)

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

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

这应该工作

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

枚举解析

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM