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