2

結果が次のようなクエリがあります

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;
        }
    }
4

5 に答える 5

6

キャストを行うことはできません。クエリは、直接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;
    }
}
于 2013-06-13T18:39:44.180 に答える
2

これを交換

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

これとともに

 System.Drawing.Color color =Color.FromName((string)rdr["color"]);
于 2013-06-13T18:40:49.093 に答える
1

文字列 (データベース クエリから返されるもの) を のインスタンスにキャストすることはできませんSystem.Drawing.Color

代わりに、次のようなものを使用System.Drawing.Color.FromName()して色を解析する必要があります。

System.Drawing.Color color = 
    System.Drawing.Color.FromName(rdr["color"] as string);
于 2013-06-13T18:38:41.957 に答える
1

キャストを行う代わりに、FromNameメソッドを使用します。

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

あなたが望むことをします。

于 2013-06-13T18:40:37.117 に答える
0

試す

System.Drawing.Color color = Color.FromName( (string)rdr["color"] );
于 2013-06-13T18:40:40.710 に答える