简体   繁体   English

对象到字节— System.InvalidCastException

[英]Object to byte — System.InvalidCastException

writing a C# function for one of your RPA robots, I get a 'System.InvalidCastException'. 为您的RPA机器人之一编写C#函数时,出现了“ System.InvalidCastException”。 Compiling the same code in VS 2015, no Exception occures. 在VS 2015中编译相同的代码,不会发生异常。

The code: 编码:

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 is from type System.Data.DataTable defined like this: 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;
}

I don't understand, whats wrong with this code? 我不明白,这段代码有什么问题? Even, if the warning level is very low... 即使警告等级很低...

There is nothing wrong with it, and the program below runs with no errors, so the definition of ICol must be the culprit. 它没有任何问题,并且下面的程序运行没有错误,因此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 https://dotnetfiddle.net/uGUKfP

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

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