对象列表上的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;
}
}
不能进行强制转换:查询返回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"] );