我已经阅读了一些SO帖子,似乎缺少最基本的操作.
public enum LoggingLevel
{
Off = 0,
Error = 1,
Warning = 2,
Info = 3,
Debug = 4,
Trace = 5
};
if (s == "LogLevel")
{
_log.LogLevel = (LoggingLevel)Convert.ToInt32("78");
_log.LogLevel = (LoggingLevel)Enum.Parse(typeof(LoggingLevel), "78");
_log.WriteDebug(_log.LogLevel.ToString());
}
Run Code Online (Sandbox Code Playgroud)
这没有例外,它很乐意存储78.有没有办法验证进入枚举的值?
我有一个这样的枚举:
public enum PromotionTypes
{
Unspecified = 0,
InternalEvent = 1,
ExternalEvent = 2,
GeneralMailing = 3,
VisitBased = 4,
PlayerIntroduction = 5,
Hospitality = 6
}
Run Code Online (Sandbox Code Playgroud)
我想检查这个Enum是否包含我给出的数字.例如:当我给4时,Enum包含它,所以我想返回True,如果我给7,这个枚举中没有7,所以它返回False.我尝试了Enum.IsDefine,但它只检查String值.我怎样才能做到这一点?
我想检查一些整数类型属于(一个)枚举成员.
例如,
public enum Enum1
{
member1 = 4,
member2 = 5,
member3 = 9,
member4 = 0
}
Run Code Online (Sandbox Code Playgroud)
Enum1 e1 =(Enum1)4给我member1
Enum1 e2 =(Enum1)10没有给我什么,我想检查一下.
关于如何转换枚举以及如果解析的值超出范围会发生什么,还有一些其他问题,例如:
public enum SomeTypes
{
SomeType1 = 1,
SomeType2 = 2,
SomeType3 = 3
}
public class SomeClass
{
...
var inRange = (SomeTypes) 1;
var outOfRange = (SomeTypes) 5;
...
}
Run Code Online (Sandbox Code Playgroud)
超出范围不会产生任何错误。但是我发现如果您尝试使用超出范围的值序列化-反序列化枚举,您会遇到奇怪的错误。例如,我得到了类似的东西
“错误解析消息或超时”
这让我一直在寻找枚举超出范围之外的其他原因。
处理此问题的建议是通过Enum.IsDefined. 这似乎工作得很好,但是在msdn上有一个相当大胆的警告:
“不要使用 System.Enum.IsDefined(System.Type,System.Object) 进行枚举范围检查,因为它基于枚举的运行时类型,该类型可能会因版本而异。”
所以,我的问题是,我们可以安全地使用Enum.IsDefined或检查枚举的值是否超出范围而不使用Enum.IsDefined?
我想enum为可能的成绩做出贡献.这是一个有效的例子:
public enum Grade
{
A, B, C, D, E, F
}
Run Code Online (Sandbox Code Playgroud)
但是,我希望成绩是整数,比如
public enum Grade
{
1, 2, 3, 4, 5
}
Run Code Online (Sandbox Code Playgroud)
为什么第一个工作但不是第二个?如何创建一个类似的变量只能取1-5的值(并且可以为空)?