检测到无法访问的代码返回值

时间:2013-05-14 07:45:24

标签: c# asp.net-mvc

如何使用此问题返回值? 请帮帮我。

protected string SendState(Object ID_DIP,Object ID_SEQ,Object MODUL)
{
    try
    {
        ViewState["ssDIP"] = ID_DIP.ToString();
        ViewState["ssSEQ"] = ID_SEQ.ToString();
        ViewState["ssMOD"] = MODUL.ToString();

        return ID_DIP.AsString();
        return ID_SEQ.AsString();
        return MODUL.ToString();
    }
    catch (Exception)
    {
        return "";
    }
}

6 个答案:

答案 0 :(得分:8)

你有多个return语句,你的代码在第一个return语句后不会执行语句。您无法从您的方法返回多个值,如果您想要返回多个值,您可以为您的案例返回List<string>或创建一个临时类并返回其对象。

在您使用AsString的代码中,我认为您可能需要ToString

定义一个类:

public class MyReturnObject
{
    public string ID_DIP { get; set; }
    public string ID_SEQ { get; set; }
    public string MODUL { get; set; }
}

修改您的方法,如:

protected MyReturnObject SendState(Object ID_DIP, Object ID_SEQ, Object MODUL)
{
    try
    {
        ViewState["ssDIP"] = ID_DIP.ToString();
        ViewState["ssSEQ"] = ID_SEQ.ToString();
        ViewState["ssMOD"] = MODUL.ToString();

        MyReturnObject obj = new MyReturnObject();
        obj.ID_DIP = ID_DIP.ToString();
        obj.ID_SEQ = ID_SEQ.ToString();
        obj.MODUL = MODUL.ToString();
        return obj;
    }
    catch (Exception)
    {
        return null;
    }
}

答案 1 :(得分:2)

首先,你有多个返回值,所以你的代码不起作用,所以你可以使用List<String>&amp;要在catch情况下返回,你可以在方法定义的顶部使用var,就像这样---&gt;

public List<string> SendState(Object ID_DIP,Object ID_SEQ,Object MODUL)
{
     var returnValue = new List<string>();
          try
          {
                ViewState["ssDIP"] = ID_DIP.ToString();
                ViewState["ssSEQ"] = ID_SEQ.ToString();
                ViewState["ssMOD"] = MODUL.ToString();


                returnValue.add(ID_DIP.AsString());
                returnValue.add(ID_DIP.AsString());
                returnValue.add(MODUL.ToString());

          }
          catch (Exception)
          {
                returnValue = null;
          }
     return returnValue;
}

现在你可以使用上面的方法---&gt;

var result = SendState( params )  //<--- params r ur parameters
if(result != null)
    // proceed
else
    // no value found

答案 2 :(得分:1)

如果要返回具有相同类型的多个结果。我建议你应该应用协程模式。具体内容如下:

protected IEnumerable<string> SendState(Object ID_DIP,Object ID_SEQ,Object MODUL)
{   
   ViewState["ssDIP"] = ID_DIP.AsString();
   ViewState["ssSEQ"] = ID_SEQ.AsString();
   ViewState["ssMOD"] = MODUL.ToString();

   yield return ID_DIP.AsString();
   yield return ID_SEQ.AsString();
   yield return MODUL.ToString();    
}

您可以参考link以更多地了解C#中的协程模式。

答案 3 :(得分:0)

在C#中,方法通常只返回一个值。该值可以是具有多个字段的对象。

如果需要从方法返回多个值,可以使用out参数或返回包含所有值的类型实例。

作为Habib suggested ,在您的情况下,返回List<string>是一种很好的方法。

答案 4 :(得分:0)

您只能从方法返回单个值,因此只有第一个return语句才能执行。

如果要返回多个字符串,请返回一个字符串数组:

protected string[] SendState(Object ID_DIP,Object ID_SEQ,Object MODUL) {
  try {
    ViewState["ssDIP"] = ID_DIP.ToString();
    ViewState["ssSEQ"] = ID_SEQ.ToString();
    ViewState["ssMOD"] = MODUL.ToString();

    return new string[] {
      ID_DIP.ToString(),
      ID_SEQ.ToString(),
      MODUL.ToString()
    };

  } catch (Exception) {
    return null; // or perhaps an empty array...?
  }
}

答案 5 :(得分:0)

在第一个return语句之后(在同一个块中)写入的任何代码都不会执行。如果要从方法返回多个值,请考虑使用对象。