2017-11-25 107 views
0

为您的一个RPA机器人编写C#函数,我得到一个'System.InvalidCastException'。在VS 2015中编译相同的代码,不会发生异常。Object to byte - System.InvalidCastException

代码:

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

我不明白,什么是错用此代码?即使如果警告级别非常低...

+1

包括堆栈跟踪。在运行时和编译时间错误之间也要弄清楚 – Nkosi

+0

您可以在引发异常时使用调试器来检查acutal值。 –

+0

你在运行时得到这个异常吗? – Darkonekt

回答

0

它没有什么不对,并且下面的程序运行时没有错误,所以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