Int转换成Enum的疑问

baofen14787 2008-11-10 04:21:06
刚学Enum,想把之前的int类型转成Enum类型。
发现有点难度。
代码片段如下

int _classkind = 0;
List<CascadingDropDownNameValue> values = new List<CascadingDropDownNameValue>();
CategoryBll bll = new CategoryBll();
switch (category)
{
case "Article":
_classkind = 0;
break;
case "Product":
_classkind = 1;
break;
}
IList<CategoryInfo> ds = bll.GetOneCate(_classkind);


_classkind 是int类型
要如何转换成Enum类型呢?

主要是因为里面有个switch,根据category的值使_classkind变成0,或1。
bll.GetOneCate(_classkind);

如果换成Enum应该怎么做?
...全文
1939 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
emmawangronghua 2010-11-03
  • 打赏
  • 举报
回复
static void Main(string[] args)
{
int i=2;
student s=(student )Enum.Parse(typeof(student), i.ToString()) ;
}
}
enum student
{
name=1,
age=2

};
acqy 2008-11-11
  • 打赏
  • 举报
回复

StringBuilder strSql = new StringBuilder();
strSql.Append("select ClassId,ClassName from Category where ClassPre = '0'");
strSql.Append(" and ClassKind=" + Convert.ToInt32(_classkind).ToString() + " ");

baofen14787 2008-11-11
  • 打赏
  • 举报
回复
嗯 谢谢回答。 结贴了
acqy 2008-11-11
  • 打赏
  • 举报
回复
之所以之前我用bll.GetOneCate(Convert.ToInt32(_classkind));是因为在我们讨论的范围里,我假设你没有修改GetOneCate方法的参数,也就是它只接受整数参数;其实我还是建议你在函数调用、返回等时候用枚举,这样更加显得含义明晰,而不会像0、1、2这样让人感觉突兀。在最后给电脑做处理的时候,再将枚举转换为你所需要的类型即可。
baofen14787 2008-11-11
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 acqy 的回复:]
C# code
StringBuilder strSql = new StringBuilder();
strSql.Append("select ClassId,ClassName from Category where ClassPre = '0'");
strSql.Append(" and ClassKind=" + Convert.ToInt32(_classkind).ToString() + " ");
[/Quote]

这和你之前用
IList<CategoryInfo> ds = bll.GetOneCate(Convert.ToInt32(_classkind));

的方法不同。
第一种是定义变量是枚举类型,然后在数据库操作将枚举类型转换成int类型,在bll调用的时候就不用转换类型,如bll.GetOneCate(_classkind);
第二种是定义int类型的变量,然后如果要调用的时候用枚举转换,如bll.GetOneCate(Convert.ToInt32(_classkind));


哪种方案比较好呢?

baofen14787 2008-11-10
  • 打赏
  • 举报
回复
问题又来了

IList<CategoryInfo> ds = bll.GetOneCate(_classkind);

我这个语句中的_classkind 是数据库查询的条件,本来是1和0的。但改成Enum类型后,查询变成了Product。查询出错了。


StringBuilder strSql = new StringBuilder();
strSql.Append("select ClassId,ClassName from Category where ClassPre = '0'");
strSql.Append(" and ClassKind=" + _classkind + " ");


怎么弄? 本来是数字的变成了字符串!!!
acqy 2008-11-10
  • 打赏
  • 举报
回复
我觉得无所谓,反正看你自己的实际情况而定。用Enum可能会使得程序更能表达实际意义一点,Article、Product应该比0和1更加meaningful吧?
lizhengnan 2008-11-10
  • 打赏
  • 举报
回复
Enum相当于是常量.用int是变量
baofen14787 2008-11-10
  • 打赏
  • 举报
回复
各项是int类型,
我打个比方说:
比如审核文章有3种状态。1是通过审核,2是不通过审核,3是未审核。

我以前做系统的时候,是用int类型,比如1代表通过审核。来做系统。

现在学了Enum,完全可以用Enum来定义这个数据类型。

但这种做法和之前的int类型有什么区别?哪种效果比较好,性能方面怎样?这是我比较关心的问题。
风骑士之怒 2008-11-10
  • 打赏
  • 举报
回复
up
lizhengnan 2008-11-10
  • 打赏
  • 举报
回复
不用转吧,如果你的 Enum里的各项也是INT型的话.

enum test {
test1=1,
test2=2
}

int i=1;
test t = i;
baofen14787 2008-11-10
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 acqy 的回复:]
我觉得应该是类似下面的样子:

C# code
enum ClassKind
{
Article = 0,
Product
}
ClassKind _classkind = ClassKind.Article;
List<CascadingDropDownNameValue> values = new List<CascadingDropDownNameValue>();
CategoryBll bll = new CategoryBll();

switch (category)
{
case "Article":
_classkind = ClassKind.Article…
[/Quote]



应该是我想要的效果!!!
hangang7403 2008-11-10
  • 打赏
  • 举报
回复
不明白有什么必要这么做
baofen14787 2008-11-10
  • 打赏
  • 举报
回复
大家觉得这样转换有没有必要?
还是用回以前的int类型?

===================

[Quote=引用 1 楼 zzyhuian06142 的回复:]
不是很明白你的需求
[/Quote]

就是结合代码片段将_classkind 转换成Enum类型
acqy 2008-11-10
  • 打赏
  • 举报
回复
我觉得应该是类似下面的样子:

enum ClassKind
{
Article = 0,
Product
}
ClassKind _classkind = ClassKind.Article;
List<CascadingDropDownNameValue> values = new List<CascadingDropDownNameValue>();
CategoryBll bll = new CategoryBll();

switch (category)
{
case "Article":
_classkind = ClassKind.Article;
break;
case "Product":
_classkind = ClassKind.Product;
break;
}
IList<CategoryInfo> ds = bll.GetOneCate(Convert.ToInt32(_classkind));

enihs 2008-11-10
  • 打赏
  • 举报
回复
你得自己先定义一个 Enum类型

Enum A
{
Article,
Product
}

然后 A.Article可以和int类型的0互相强制转换,A.Product可以和int类型的1互相强制转化.
我姓区不姓区 2008-11-10
  • 打赏
  • 举报
回复
直接强制转换就可以了IList<CategoryInfo> ds = bll.GetOneCate((enum类型的名字)_classkind);

zzyhuian06142 2008-11-10
  • 打赏
  • 举报
回复
不是很明白你的需求

110,530

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧