2017-11-25 6 views
0

RPAロボットのいずれかのC#関数を記述すると、 'System.InvalidCastException'が発生します。 VS 2015で同じコードをコンパイルしますが、例外は発生しません。Object to byte - System.InvalidCastException

コード:私はこのコードでいただきました!間違っている、理解していない

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

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からでは次のように定義されましたか?警告レベルが非常に低い場合でも...

+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