当我尝试使用或返回枚举值时,是否可以避免强制转换它? [英] Can I avoid casting an enum value when I try to use or return it?
问题描述
如果我有以下枚举:
public enum ReturnValue{
Success = 0,
FailReason1 = 1,
FailReason2 = 2
//Etc...
}
我回来时可以避免投射吗,像这样:
Can I avoid casting when I return, like this:
public static int main(string[] args){
return (int)ReturnValue.Success;
}
如果不是,为什么默认情况下不将枚举值视为 int?
If not, why isn't an enum value treated as an int by default?
推荐答案
枚举应该是类型安全的.我认为他们并没有让它们隐式可铸造以阻止其他用途.尽管该框架允许您为它们分配一个常数值,但您应该重新考虑您的意图.如果您主要使用枚举来存储常量值,请考虑使用静态类:
enums are supposed to be type safe. I think they didn't make them implicitly castable to discourage other uses. Although the framework allows you to assign a constant value to them, you should reconsider your intent. If you primarily use the enum for storing constant values, consider using a static class:
public static class ReturnValue
{
public const int Success = 0;
public const int FailReason1 = 1;
public const int FailReason2 = 2;
//Etc...
}
这可以让你做到这一点.
That lets you do this.
public static int main(string[] args){
return ReturnValue.Success;
}
编辑
当您确实想要为枚举提供值时,就是您想要组合它们的时候.请参阅以下示例:
When you do want to provide values to an enum is when you want to combine them. See the below example:
[Flags] // indicates bitwise operations occur on this enum
public enum DaysOfWeek : byte // byte type to limit size
{
Sunday = 1,
Monday = 2,
Tuesday = 4,
Wednesday = 8,
Thursday = 16,
Friday = 32,
Saturday = 64,
Weekend = Sunday | Saturday,
Weekdays = Monday | Tuesday | Wednesday | Thursday | Friday
}
然后可以通过使用按位数学来使用该枚举.请参阅下面的一些应用示例.
This enum can then be consumed by using bitwise math. See the below example for some applications.
public static class DaysOfWeekEvaluator
{
public static bool IsWeekends(DaysOfWeek days)
{
return (days & DaysOfWeek.Weekend) == DaysOfWeek.Weekend;
}
public static bool IsAllWeekdays(DaysOfWeek days)
{
return (days & DaysOfWeek.Weekdays) == DaysOfWeek.Weekdays;
}
public static bool HasWeekdays(DaysOfWeek days)
{
return ((int) (days & DaysOfWeek.Weekdays)) > 0;
}
public static bool HasWeekendDays(DaysOfWeek days)
{
return ((int) (days & DaysOfWeek.Weekend)) > 0;
}
}
这篇关于当我尝试使用或返回枚举值时,是否可以避免强制转换它?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!