Windows Phone - color . fromarbb()无效强制转换

本文关键字:无效 转换 Phone color fromarbb Windows | 更新日期: 2023-09-27 18:02:35

我有一个应用程序,从一个孤立的存储设置拉背景颜色的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);

Windows Phone - color . fromarbb()无效强制转换

正如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"]

上面"类型强制转换"answers"类型转换"的用法是为了说明一点;有关技术细节和术语,请参阅以下问题。

  • 转换盒装值
  • 不能从double类型强制转换为int
  • 是否与转换相同?
  • 类型转换和转换的区别是什么?