![](/img/trans.png)
[英]An unhandled exception of type 'System.ArgumentException' occurred
[英]Unhandled Exception: System.ArgumentException: Cannot widen from source type to target type
以下腳本具有未處理的異常。未處理的異常:System.ArgumentException:無法從源類型擴展到目標類型,因為源類型不是原始類型或無法完成轉換。 有人知道嗎? 我設置了斷點。 這是設置值行給我這個錯誤。 但我不知道出了什么問題。
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);
另一方面,您可能還需要調整其他代碼,因為根據您對其他字段的操作,您可能會再次遇到問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.