【问题标题】:Windows Phone - Color.FromArgb() invalid castWindows Phone - Color.FromArgb() 无效转换
【发布时间】:2014-05-10 04:18:00
【问题描述】:

我有一个应用程序从隔离存储设置中提取背景颜色的 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);

【问题讨论】:

  • 你需要双重投射:(byte)(int)dailyspring_settings["back_color_a"].
  • @Ulugbek Umirov,谢谢你,双重铸造作品!

标签: c# casting


【解决方案1】:

正如 Ulugbek Umirov 指出的那样,解决方法是“双重施法”。

假设s 表示表达式dailyspring_settings["back_color_b"],这样表达式的类型就被键入为object,而它计算的对象是int (System.Int32)。

因此,首先从object->int 开始使用以下Type Cast。 Type Cast 更改了对象的 表达式 或“视图”的类型,但它不会更改或创建新对象 - 因此它会因 InvalidCastException 而失败如果s 不计算为int (System.Int32) 值。

int i = (int)s;

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

byte b = (byte)i;

因此,按照建议,将它们放在一起:

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

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

【讨论】:

    猜你喜欢
    • 2014-08-27
    • 1970-01-01
    • 1970-01-01
    • 2015-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-12
    • 1970-01-01
    相关资源
    最近更新 更多