c# - 未处理的异常:System.ArgumentException:无法从源类型扩展到目标类型
问题描述
以下脚本有未处理的异常。未处理的异常:System.ArgumentException:无法从源类型扩大到目标类型,因为源类型不是原始类型或无法完成转换。有人知道吗?我设置断点。这是 setvalue 行给我这个错误。但我不知道出了什么问题。
System.Array pixelDataO;
IPixelBlock3 pBlockO_3 = (IPixelBlock3)pBlockO;
pixelDataO = (System.Array)pBlockO_3.get_PixelData(0);
// Console.WriteLine(pixelDataO);
int maxy = -1;
Console.WriteLine("going rastermerge");
//loop through each pixel in the pixelblock and do calculation
for (int x = 0; x < pBlock1_3.Width; x++)
{
for (int y = 0; y < pBlock1_3.Height; y++)
{
// check to see if it's a valid data point
object oval1 = pBlock1_3.GetVal(0, x, y);
object oval2 = pBlock2_3.GetVal(0, x, y);
object oval3 =null;
if (oval1 != null && oval2 != null)
{
//Console.WriteLine(oval1);
int val1 = Convert.ToByte(oval1);
//Console.WriteLine("finish");
// set out of range values to 1
if (val1 < 1 || val1 > 5) val1 = 1;
// S5 must be coded as a 4
if (val1 == 5) val1 = 4;
int val2 = Convert.ToByte(oval2); ;
// int val3 = 10 * slval[val1] + val2;
int val3 = 10 * val1 + val2;
if (val3 > 10 && y > maxy) maxy = y;
oval3 = Convert.ToSByte(val3);
//Console.WriteLine(oval3);
}
Console.WriteLine(oval3);
pixelDataO.SetValue(oval3, x, y);
}
}
解决方案
未处理的异常:System.ArgumentException:无法从源类型扩大到目标类型,因为源类型不是原始类型或无法完成转换
发生这种情况是因为您试图填充无法转换为目标类型的类型。让我们看看你的代码...
采取这一行:pixelDataO = (System.Array)pBlockO_3.get_PixelData(0);
我在评论中询问这是什么类型,pBlockO_3.get_PixelData(0);
返回什么?根据评论,这是一个System.SByte[,]
。
在您的代码中,特别是您所在的循环中,您有:
oval3 = Convert.ToByte(val3);
当你这样做时,你会得到一个8-bit-unsigned integer
. 接下来,您尝试为二维pixelDataO
数组中指定位置的元素设置一个值。
pixelDataO.SetValue(oval3, x, y);
问题oval3
不是System.SByte
它是一个8-bit unsigned integer
;错误的类型及其无法扩大的原因。
要解决此问题,您需要使用Convert.ToSByte()
现在这一行oval3 = Convert.ToByte(val3);
变成:
oval3 = Convert.ToSByte(val3);
另一方面,您可能还需要调整其他代码,因为您可能会再次遇到问题,具体取决于您对其他字段执行的操作。
推荐阅读
- clojure - 使用 Clojure 在 Quil 中创建其他 3D 基元
- powershell - 如何使用 PowerShell 取消和删除队列中的等待构建
- python-2.7 - 无法在 Ubuntu 服务器上停用虚拟环境
- java - 尝试在 HTTPCLIENT -JAVA 中发送 POST 请求时,收到 400 Bad Request
- html - 如何修复从 div 元素底部延伸出来的文本
- json - docker和格式json
- matlab - 如何编写一个函数来逼近一阶偏导数
- javascript - 在 Cannon.js 中禁用身体碰撞
- ios - userNotificationCenter:didReceive:withCompletionHandler 太短
- java - 使用bash编译java时出现Invalid flag错误