Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 它是如何工作的?_C#_Enums - Fatal编程技术网

C# 它是如何工作的?

C# 它是如何工作的?,c#,enums,C#,Enums,我有这个枚举 public enum EstadoPeticion : int { PeticionCreada = 1, PorValidar = 2, Validada = 3, Error = 0 } 使用枚举,我必须执行以下操作 (int)EstadoPeticion.PeticionCreada 为什么必须强制转换类型以及如何在不使用强制转换的情况下创建枚举类型?我认为强制转换可能是一种不好的做法强制转换没有什么问题(这不是一种不好的做法

我有这个枚举

public enum EstadoPeticion : int
{
    PeticionCreada = 1,
    PorValidar = 2,
    Validada = 3,
    Error = 0      
}
使用枚举,我必须执行以下操作

(int)EstadoPeticion.PeticionCreada

为什么必须强制转换类型以及如何在不使用强制转换的情况下创建枚举类型?我认为强制转换可能是一种不好的做法

强制转换没有什么问题(这不是一种不好的做法)。如果要将枚举用作整数,则必须始终强制转换,这正是枚举的工作方式。尽管您不必强制转换枚举,因为您应该主要比较彼此之间的枚举


例如:

if (myenum == PeticionCreada) {

}

您不需要强制转换枚举。如果希望错误为0,可以执行以下操作:

public enum EstadoPeticion    
{
  Error = 0,
  PeticionCreada,
  PorValidar,
  Validada   
}
其余的值将自动增加1。

铸造并不是一种不好的做法。这是一种气味。。。附近可能有潜在不良行为的迹象

在这种情况下,潜在的错误做法是将
Enum
int
进行比较。这通常(并非总是)表明您的设计有其他错误,
int
值可能也应该是
Enum
,或者您应该使用不同的机制来表示此数据

再说一次,这可能很好


一个完全正确的例子是使用数据库,其中需要将
Enum
作为
int
存储在数据库表中。保存数据时将
Enum
转换为
int
,检索数据时将
int
转换为
Enum
。在这种情况下,演员阵容是合适的,也是必需的。

我必须做什么?如果使用得当,您当然不必将枚举强制转换为整数。为什么要这样做?为什么你认为这是一种不好的做法?如果我想做像这样的事情:IdesTadoPiction=EstadoPiction.PeticionReada,它总是需要cast IdesTadoPiction=**(int)**EstadoPiction.PeticionReada,我们需要更多的上下文。什么是理想化?它是局部变量还是类型的属性或字段?它声明的类型是什么?是否可以将其更改为一种类型的EstadOperation?例如,int value=(int)EstadOperation.PeticionReada,“value”作为int存储在数据库中,但如果我想为该值分配一些int,则始终需要使用强制转换?如果要使用与枚举成员关联的整数值,则必须强制转换。但是,在枚举声明中不需要“:int”部分。您可以在此处参考有关铸造的信息: