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

问题描述:

如何在此问题中返回值? 请帮助我。检测到无法检测到的代码返回值

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 ""; 
    } 
} 
+1

我不知道你在做什么,但是如果你将返回类型从'string'改为'IEnumerable ',那么你可以把'return'改成'yield return',你将会得到一个迭代器块,当消费者'foreach'通过它时,一个接一个地返回许多字符串。 – 2013-05-14 07:50:15

第一件事情是你有多个返回值,所以你的代码将不起作用,所以你可以使用List<String> &返回的情况下,你可以在方法定义的顶部使用一个var,像这样--- >

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; 
} 

现在ü可以用上面的方法是这样--->

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

'受保护的列表 SendState'? – Damith 2013-05-14 08:00:39

你有多个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; 
    } 
} 

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

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

由于Habib suggested,返回List<string>是一个很好的方法在你的情况。

您只能从方法中返回单个值,因此在您的三个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...? 
    } 
} 

是第一个return语句(同一区块内)后编写任何代码将不会执行。如果你想从一个方法返回多个值,请考虑使用对象。

如果你想返回的具有相同类型的多个结果。我建议你应该使用协程模式。细节在这里如下代码:

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#协程模式。