对象列表上的InvalidCastException

本文关键字:InvalidCastException 列表 对象 | 更新日期: 2023-09-27 18:18:11

我有一个查询,其结果看起来像

Blue
OrangeRed
Black
Green
Silver
Red

我打算从这个结果集中创建一个System.Drawing.Color对象的列表。当我运行程序时,我得到InvalidCastException。所有这些颜色肯定都在Color的枚举中。为什么会出现这个异常?

private List<System.Drawing.Color> BuildColorList()
    {
        List<System.Drawing.Color>ColorList = new List<System.Drawing.Color>();
        using (SqlConnection con = new SqlConnection(cs))
        {
            using (SqlCommand cmd = new SqlCommand("select color from Colors", con))
            {
                con.Open();
                cmd.CommandType = CommandType.Text;
                SqlDataReader rdr = cmd.ExecuteReader();
                while (rdr.Read())
                {
                    System.Drawing.Color color = (System.Drawing.Color)rdr["color"];
                    ColorList.Add(color);
                }
            }
            return ColorList;
        }
    }

对象列表上的InvalidCastException

不能进行强制转换:查询返回System.String对象,不能直接强制转换为System.Drawing.Color。相反,您需要使用Color.FromName(string)方法代替:

private List<System.Drawing.Color> BuildColorList()
{
    List<System.Drawing.Color>ColorList = new List<System.Drawing.Color>();
    using (SqlConnection con = new SqlConnection(cs))
    {
        using (SqlCommand cmd = new SqlCommand("select color from Colors", con))
        {
            con.Open();
            cmd.CommandType = CommandType.Text;
            SqlDataReader rdr = cmd.ExecuteReader();
            while (rdr.Read())
            {
                System.Drawing.Color color = System.Drawing.Color.FromName((string)rdr["color"]);
                ColorList.Add(color);
            }
        }
        return ColorList;
    }
}

替换此

System.Drawing.Color color = (System.Drawing.Color)rdr["color"];

 System.Drawing.Color color =Color.FromName((string)rdr["color"]);

使用FromName方法代替强制转换;

System.Drawing.Color color = Color.FromName(rdr["color"]);

您不能将字符串(这是从数据库查询返回的内容)强制转换为System.Drawing.Color的实例。

相反,您应该使用类似System.Drawing.Color.FromName()的代码来解析颜色:
System.Drawing.Color color = 
    System.Drawing.Color.FromName(rdr["color"] as string);

Try

System.Drawing.Color color = Color.FromName( (string)rdr["color"] );
相关文章:
  • 没有找到相关文章