我有一个应用程序,从一个孤立的存储设置拉背景颜色的ARGB值;这里我给出了int数据类型的值。但是color.fromargb()需要字节数据类型,但是当我强制转换它时,它会给出一个异常"invalid cast"
下面是异常代码:backcolor.Color = Color.FromArgb((byte)dailyspring_settings["back_color_a"],(byte)dailyspring_settings["back_color_r"], (byte)dailyspring_settings["back_color_g"], (byte)dailyspring_settings["back_color_b"]);
隔离存储代码
dailyspring_settings.Add("back_color_a",100 );
dailyspring_settings.Add("back_color_r",103 );
dailyspring_settings.Add("back_color_g",158 );
dailyspring_settings.Add("back_color_b",236);
正如Ulugbek Umirov指出的那样,解决方法是"双强制转换"。
假设s
表示表达式dailyspring_settings["back_color_b"]
,使得表达式的类型为object
,并且它计算的对象为int
(System.Int32)。
因此,首先从object->int
使用以下类型转换完成。类型转换改变表达式或对象的"视图"的类型,但它不改变或创建一个新对象-因此,如果s
不计算为int
(System.Int32)值,它将失败并产生InvalidCastException。
int i = (int)s;
现在,有了类型为int
的表达式,下一步是int->byte
。这是通过在表达式和字节之间定义类型转换来完成的。结果是一个新值,字节。
byte b = (byte)i;
所以,按照建议,把它们放在一起:
(byte)(int)dailyspring_settings["back_color_a"]
上面"类型强制转换"one_answers"类型转换"的用法是为了说明一点;有关技术细节和术语,请参阅以下问题。
- 转换盒装值
- 不能从double类型强制转换为int
- 是否与转换相同?
- 类型转换和转换的区别是什么?