必须在控制离开当前方法之前指定out参数

时间:2016-11-18 09:50:49

标签: c# asp.net-mvc

       else
  strPath = Path.Combine(Server.MapPath("~/" + strFileToUpload + strVendorNo), fileName);

                                if (!string.IsNullOrEmpty(strPath))
                                {
                                    strReturnMssg = strPath;
                                    fileItem.SaveAs(strPath);
                                }
                            }
                        }
                                else


         strReturnMessage = "Selected file should be less than 5ΜB.";
                                }
                    }
                }
            }
        }
        catch (Exception ex)
        {
            Response.Write("<!--" + ex.Message + "-->");
        }

        return strReturnMssg;
    }

无法将附件文件发送到仅服务器的路径 错误11中出错必须在控制离开当前方法之前指定out参数'strReturnMessage'

2 个答案:

答案 0 :(得分:0)

您的返回消息变量似乎不是在try-catch块中发生错误时定义的。只需在方法开头设置strReturnMssg = string.Empty或默认值即可。

答案 1 :(得分:0)

错误是因为在您离开方法之前,您尚未在某个范围内为out参数分配值。例如:

bool TrySomeMethod(bool someCondition, out int someValue)
{
    if (someCondition)
    {
        someValue = 1;
        return true;
    }
    else
    {
        return false;
    }
}

会给你相同的编译时错误,因为在else语句中的return语句之前没有分配someValue

要解决此问题,您可以在返回前指定一个值:

someValue = -1;
return false;

或在方法的顶部,您可以为out参数指定一些默认值,即

someValue = -1;
if (someCondition)
//....

然而,使用这种方法,您必须小心将out参数设置为您希望它成功的参数,因为没有错误,即

bool TrySomeMethod(bool someCondition, out int someValue)
{
    someValue = -1;
    if (someCondition)
    {
        return true;
    }
    else
    {
        return false;
    }
}

那将编译正常,但是存在一个逻辑问题,因为someValue永远不会在if语句中设置为1

请注意,在您的特定情况下,您的方法希望strReturnMessageout参数,并且您还从方法strReturnMssg返回一个非常相似的命名变量。如果你需要两条回复信息,那么你的逻辑就不行了。