2017-11-25 131 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