c#:当在switch语句中使用时,为什么需要从枚举转换为INT?枚举就是INT

c#:当在switch语句中使用时,为什么需要从枚举转换为INT?枚举就是INT,c#,enums,casting,switch-statement,C#,Enums,Casting,Switch Statement,有人能告诉我为什么需要从枚举中转换为Int吗 switch (Convert.ToInt32(uxView.SelectedValue)) { case (int)ViewBy.Client: 如果我删除强制转换(int),它会失败,并说我必须使用强制转换 这是我的枚举,枚举是整数。。。。有人知道这件事吗 public enum ViewBy { Client, Customer }

有人能告诉我为什么需要从枚举中转换为Int吗

        switch (Convert.ToInt32(uxView.SelectedValue))
        {
            case (int)ViewBy.Client:
如果我删除强制转换(int),它会失败,并说我必须使用强制转换

这是我的枚举,枚举是整数。。。。有人知道这件事吗

    public enum ViewBy
    {
        Client,
        Customer
    }

您应该使用将字符串值转换为枚举

此外,枚举的底层类型不一定必须是Int32。

在C#
enum
s中不仅仅是数字。相反,它们是与类型关联的数字,或者是上下文中具有名称的数字

要避免在
case
语句中强制转换,可以执行强制转换
开关

switch((ViewBy)Convert.ToInt32(uxView.SelectedValue))
然而,这也有其自身的问题。例如,这段代码将向控制台写出
7

enum ViewBy
{
    ChuckNorris = 1,
    JamesBond
}

Console.WriteLine((ViewBy)7);

枚举
在.NET typesystem中是而不是
整数

框架借助离散整数值存储它们-这是另一回事

托马斯来自:

每种情况下的常量表达式 标签被转换为 表达与比较 等式表达式。控制 传递给其大小写为的语句 常量表达式与值匹配 表达方式


没有从enum到int的隐式转换,因此每个
案例
都需要显式转换。但是请注意,最初打开正确类型的表达式比强制转换每个大小写更有意义(请参见)。

我认为在这种情况下,转换为int和all看起来有点蹩脚

假设您向该方法传递了int而不是enum,请记住:

  • 您是否打算充分记录这些信息,以便将来任何时候都能够修复或增强系统
  • 此枚举是否未在其他地方使用?(关于如何处理相同信息的模式是避免青少年犯错或迷失自我的关键。)
  • 如果两个答案都是否定的,那么在不久的将来,你应该考虑为了你自己的理智而保留它。


    顺便说一句,与字符串相比,转换为int并将其与另一个int进行比较更简单。

    在回答“有人能告诉我为什么需要从枚举转换为int”的问题时

    必须强制转换为整数,因为枚举值不是整数。枚举具有可存储为整数类型的基础值(默认值为int)

    您可以使用以下命令确定基础类型:

    Enum.GetUnderlyingType( typeof(ViewBy) );
    

    您可以找到更多详细信息,

    为什么需要强制转换为int?
    如果uxView.SelectedValue是一个ViewBy枚举,那么简单地(ViewBy)uxView.SelectedValue就足够了,对吗?

    听起来像
    SelectedValue
    字符串,这里的问题是什么?!?!?做tell@jordan.peoples如果您仍然感兴趣,请查看我的更新。迟到总比不迟到好,嗯:)
    
    switch ( expression )
          case constant-expression : statement
       [default  : statement]
    
    Enum.GetUnderlyingType( typeof(ViewBy) );