none
把Oject转换成自定义枚举变量抛出异常怎么回事? (有些情况下却能正常转换) RRS feed

  • 问题

  • 我有一个DataTable,里面存有自定义的枚举变量。
    现在要用了,想把它取出来,却不能转换回来了。

    会抛出异常(InvalidCastException),提示错误:Specified cast is not valid.

    Sample Code如下:

            public enum DirectionET
            {
                Buy,
                Sell
            }
    
            private void button2_Click(object sender, RoutedEventArgs e)
            {
                //这里能够直接把Object强制转换成枚举变量
                DirectionET enum1 = DirectionET.Sell;
                Object obj = enum1;
                DirectionET enum2 = (DirectionET)obj;       //这里可以!!!!
    
    
                //建立一个简单的表格,像枚举存进去
                DataTable dt = new DataTable();
                {
                    dt.Columns.Add("enum");
                    dt.Columns.Add("string");
                    DataRow row=dt.NewRow();
                    row["enum"] = enum1;
                    row["string"] = "a test";
                    dt.Rows.Add(row);
                }
    
                //从表格里把枚举取出来,是Object对象。 然后想把这个Object对象换成枚举变量就不行了
                {
                    DataRow row = dt.Rows[0];
                    Object enumObj = row["enum"];
                    DirectionET enum3 = (DirectionET)enumObj;  //这里提示异常,为什么不行?????
                }
            }
    


    我现在想把DataTable里的枚举值读出来,不知道怎么办。

    请高手们帮我看看,谢谢  ^_^

     

     

     

    2011年9月2日 15:03

答案

全部回复

  • 您好,枚举的默认值是int型,也就是说与int类型的转换没问题。

    如果要和字符串转换则需借助TypeConverter


    2011年9月2日 15:30
    版主
  • 用MessageBox.Show(row["enum"].GetType().ToString());调试看看

    会发现,类型虽为object 但值 为字符

    所以如果想把DataTable里的枚举值读出来

    直接 row["enum"].ToString() 就可以得到你要的结果

     


    Shadowと愉快なコード達
    2011年9月2日 15:53
  • 晕,我是把枚举变量存进DataTable,以为取出来还是个枚举值,所以直接强制转换,没想到已经变成String类型了。
    谢谢两位。

    但是现在它是字符串型的值"Sell",怎么把它转换枚举值呢? 是用TypeConverter吗? 

    我试了一下不知道怎么转,我试了下用下面的代码,但还是报异常:

    Object enumObj = row["enum"];
    TypeConverter myConvert=new TypeConverter();
    Object convertedObj = myConvert.ConvertTo(enumObj, enum1.GetType());
    

    异常标题:NotSupportedException was unhandled。

    异常信息:'TypeConverter' is unable to convert 'System.String' to 'WpfApplication3.MainWindow+DirectionET'.

     

    怎么把字符串转回成枚举值,能给几句代码吗? ^_^

     

    2011年9月2日 17:04
  • 哈哈,成了!!
     
    DirectionET lastEnum = (DirectionET)Enum.Parse(typeof(DirectionET), enumObj.ToString());
    
     
    2011年9月2日 17:10
  • 谢谢分享解决方案。
    Best Regards,
    Rocky Yue[MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    2011年9月9日 8:40
    版主