Windows Phone - Color.FromArgb()无效的强制转换

时间:2014-05-10 04:18:00

标签: c# casting

我有一个应用程序,它从隔离存储设置中提取背景颜色的ARGB值;我在int数据类型中给出了值。但是color.fromargb()需要字节数据类型,但是当我投射它时,它会给出异常"无效的强制转换"

这是异常代码:

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);

1 个答案:

答案 0 :(得分:2)

正如Ulugbek Umirov指出的那样,解决方案是"双重演员"。

假设s表示表达式dailyspring_settings["back_color_b"],表达式的类型为object,其评估的对象为int(系统.Int32)。

因此首先从object->int开始使用以下Type Cast。类型转换会更改表达式的类型或"视图"对象,但它更改或创建新对象 - 因此如果s未评估为int,它将失败并出现InvalidCastException(System.Int32 )价值。

int i = (int)s;

现在,如果表达式为int,则下一步是int->byte。这是通过在表达式和字节之间定义的类型转换来完成的。结果是新值,即字节。

byte b = (byte)i;

所以,正如所建议的那样,把它们放在一起:

(byte)(int)dailyspring_settings["back_color_a"]

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