当我对这段代码使用try catch exception
时,我收到以下错误:
“并非所有代码路径都返回值”
我的代码:
public System.Drawing.Image Scan()
{
try
{
const string formatJPEG = "{B96B3CAE-0728-11D3-9D7B-0000F81EF32E}";
WIA.CommonDialog scanDialog = new WIA.CommonDialog();
WIA.ImageFile imageFile = null;
imageFile = scanDialog.ShowAcquireImage(WIA.WiaDeviceType.ScannerDeviceType, WIA.WiaImageIntent.GrayscaleIntent,
WIA.WiaImageBias.MinimizeSize, formatJPEG, false, true, false);
WIA.Vector vector = imageFile.FileData;
System.Drawing.Image i = System.Drawing.Image.FromStream(new System.IO.MemoryStream((byte[])vector.get_BinaryData()));
return i;
}
catch (COMException ce)
{
if ((uint)ce.ErrorCode == 0x800A03EC)
{
return ce;
}
}
答案 0 :(得分:4)
如下所示更改catch
阻止功能会有效,但您仍会面临一些问题。因为您的方法返回类型Image
,并且您在catch块中返回COMException
。我建议你抛出异常或登录catch块
if ((uint)ce.ErrorCode == 0x800A03EC)
{
//DO LOGGING;
}
else
{
throw ce;
}
答案 1 :(得分:1)
这里有两个不同的问题。首先,如果不满足条件,你的catch块将不会返回任何内容。其次,catch块中的返回类型与try块内的返回类型不同。
你可能想要在catch块中更像这样的东西:
catch (COMException ce)
{
if ((uint)ce.ErrorCode == 0x800A03EC)
return null; // Don't return anything if a specific code was found
throw ce; // Rethrow the exception for all other issues.
}