刚学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应该怎么做?  

解决方案 »

  1.   

    直接强制转换就可以了IList<CategoryInfo> ds = bll.GetOneCate((enum类型的名字)_classkind);
      

  2.   

    你得自己先定义一个 Enum类型Enum A
    {
     Article,
     Product
    }然后 A.Article可以和int类型的0互相强制转换,A.Product可以和int类型的1互相强制转化.
      

  3.   

    我觉得应该是类似下面的样子: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));
      

  4.   

    大家觉得这样转换有没有必要?
    还是用回以前的int类型?===================
    就是结合代码片段将_classkind 转换成Enum类型
      

  5.   

    不用转吧,如果你的 Enum里的各项也是INT型的话.enum test { 
        test1=1,
        test2=2
    }int i=1;
    test t = i;
      

  6.   

    各项是int类型,
    我打个比方说:
    比如审核文章有3种状态。1是通过审核,2是不通过审核,3是未审核。我以前做系统的时候,是用int类型,比如1代表通过审核。来做系统。现在学了Enum,完全可以用Enum来定义这个数据类型。但这种做法和之前的int类型有什么区别?哪种效果比较好,性能方面怎样?这是我比较关心的问题。
      

  7.   

    Enum相当于是常量.用int是变量
      

  8.   

    我觉得无所谓,反正看你自己的实际情况而定。用Enum可能会使得程序更能表达实际意义一点,Article、Product应该比0和1更加meaningful吧?
      

  9.   

    问题又来了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 + " ");
    怎么弄?  本来是数字的变成了字符串!!!
      

  10.   


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

  11.   


    这和你之前用
    IList<CategoryInfo> ds = bll.GetOneCate(Convert.ToInt32(_classkind));的方法不同。
    第一种是定义变量是枚举类型,然后在数据库操作将枚举类型转换成int类型,在bll调用的时候就不用转换类型,如bll.GetOneCate(_classkind);
    第二种是定义int类型的变量,然后如果要调用的时候用枚举转换,如bll.GetOneCate(Convert.ToInt32(_classkind));
    哪种方案比较好呢?
      

  12.   

    之所以之前我用bll.GetOneCate(Convert.ToInt32(_classkind));是因为在我们讨论的范围里,我假设你没有修改GetOneCate方法的参数,也就是它只接受整数参数;其实我还是建议你在函数调用、返回等时候用枚举,这样更加显得含义明晰,而不会像0、1、2这样让人感觉突兀。在最后给电脑做处理的时候,再将枚举转换为你所需要的类型即可。
      

  13.   

            static void Main(string[] args)
            {
                int i=2;
              student s=(student )Enum.Parse(typeof(student), i.ToString())    ;
            }
        }
        enum student
        {
            name=1,
            age=2    };