2010-11-19 61 views
14
时使用从Enum需要一个INT铸造

谁能告诉我为什么我需要转换。如果我从我的枚举C#:为什么在一个switch语句?枚举是整数

 switch (Convert.ToInt32(uxView.SelectedValue)) 
     { 
      case (int)ViewBy.Client: 

INT删除演员(int)它失败,并说我必须使用演员。

这是我的枚举,枚举是整数....任何人都知道这个?

public enum ViewBy 
    { 
     Client, 
     Customer 
    } 

回答

9

在C#enum s不只是数字。相反,它们是与上下文中的名称相关联的数字或数字。

为了避免case报表蒙上,你可以在switch做投:

switch((ViewBy)Convert.ToInt32(uxView.SelectedValue)) 

然而,这有它自己的问题。例如,这段代码将写出7到控制台。

enum ViewBy 
{ 
    ChuckNorris = 1, 
    JamesBond 
} 

Console.WriteLine((ViewBy)7); 
+0

伟大..谢谢..那工作! – Martin 2010-11-22 02:08:51

+4

它的问题将是什么?!?!?请告诉 – 2013-04-05 20:15:07

+1

@ jordan.peoples如果您还有兴趣,请参阅我的更新。晚些时候再好,永远不会,呵呵:) – 2016-10-01 08:21:05

4

您应该使用Enum.Parse将字符串值转换为枚举值。

ViewBy selected = (ViewBy) Enum.Parse(typeof(ViewBy), uxView.SelectedValue);   
switch (selected) 
{ 
    case ViewBy.Client: 
    // etc. 
} 

此外,枚举的基础类型不一定需要是Int32。

2

Enumsints在.NET类型系统!
该框架将它们存储与离散整数值的援助 - 这是一个不同的事情...

托马斯

2

MSDN

switch (expression) 
     case constant-expression : statement 
    [default : statement] 

在每种情况下 的常数表达式标签转换为 表达式的类型,并与 表达式进行比较,表达式为。控制 传递给条件为 常量表达式与表达式的值 匹配的语句。

没有从枚举到int的隐式转换,因此您的每个case都需要显式转换。但请注意,最初打开正确类型的表达式比投射每个案例更有意义(请参阅Enum.Parse)。

0

我想在这种情况下看起来有点跛脚,有一个int和所有的转换。

假设你传递一个int,而不是一个枚举,该方法,记住:

  1. 你要记录得很清楚,以便随时取消以后你会能够修复或增强系统?
  2. 这个枚举不在其他地方使用吗?(关于如何处理相同信息的模式是不让青少年犯错或失去自己的关键。)

如果两个答案都是否定的,那么你应该考虑为了它而保留它在不久的将来,你自己的理智。

而顺便说一句,转换为int并将其与另一个int进行比较比每个示例的字符串都要简单。

0

在回答这个问题:“谁能告诉我,为什么我需要转换从我的枚举INT” ......

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

您可以确定底层类型与

Enum.GetUnderlyingType(typeof(ViewBy)); 

你可以找到更多的细节herehere

0

为什么你需要投在所有的诠释? 如果uxView.SelectedValue是一个ViewBy枚举,那么简单的(ViewBy)uxView.SelectedValue就够了吗?

+0

这听起来像'SelectedValue'是一个'字符串'在这里 – 2010-11-19 13:29:56

相关问题