繁体   English   中英

对象到字节— System.InvalidCastException

[英]Object to byte — System.InvalidCastException

为您的RPA机器人之一编写C#函数时,出现了“ System.InvalidCastException”。 在VS 2015中编译相同的代码,不会发生异常。

编码:

try
{
    byte[] IColByte = new byte[4]{
                          (byte)ICol.Rows[0]["B"], 
                          (byte)ICol.Rows[0]["G"], 
                          (byte)ICol.Rows[0]["R"], 
                          (byte)ICol.Rows[0]["A"]};
}
catch(System.Exception e)
{
    throw new System.Exception("ERROR: Unable to create color byte array!" +
        System.Environment.NewLine + e.Message);
}   

ICol来自System.Data.DataTable类型,其定义如下:

public static System.Data.DataTable GenerateColor(byte B, byte G, byte R, byte A)
{
    System.Data.DataTable dt = new System.Data.DataTable();
    dt.Columns.Add(new System.Data.DataColumn("B", typeof(byte)));
    dt.Columns.Add(new System.Data.DataColumn("G", typeof(byte)));
    dt.Columns.Add(new System.Data.DataColumn("R", typeof(byte)));
    dt.Columns.Add(new System.Data.DataColumn("A", typeof(byte)));

    dt.Rows.Add(dt.NewRow());
    dt.Rows[0]["B"] = B;
    dt.Rows[0]["G"] = G;
    dt.Rows[0]["R"] = R;
    dt.Rows[0]["A"] = A;

    return dt;
}

我不明白,这段代码有什么问题? 即使警告等级很低...

它没有任何问题,并且下面的程序运行没有错误,因此ICol的定义必须是罪魁祸首。

using System;
using System.Data;

public class Program
{
    public static void Main()
    {
        var ICol = GenerateColor(2, 3, 4, 5);
        byte[] IColByte = new byte[4]{
            (byte)ICol.Rows[0]["B"], 
            (byte)ICol.Rows[0]["G"], 
            (byte)ICol.Rows[0]["R"], 
            (byte)ICol.Rows[0]["A"]};
        Console.WriteLine(String.Join(", ", IColByte));  // Writes "2, 3, 4, 5"
    }

    public static System.Data.DataTable GenerateColor(byte B, byte G, byte R, byte A)
    {
        System.Data.DataTable dt = new System.Data.DataTable();
        dt.Columns.Add(new System.Data.DataColumn("B", typeof(byte)));
        dt.Columns.Add(new System.Data.DataColumn("G", typeof(byte)));
        dt.Columns.Add(new System.Data.DataColumn("R", typeof(byte)));
        dt.Columns.Add(new System.Data.DataColumn("A", typeof(byte)));

        dt.Rows.Add(dt.NewRow());
        dt.Rows[0]["B"] = B;
        dt.Rows[0]["G"] = G;
        dt.Rows[0]["R"] = R;
        dt.Rows[0]["A"] = A;

        return dt;
    }
}

https://dotnetfiddle.net/uGUKfP

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM