2013-05-14 71 views
2

如何在此問題中返回值? 請幫助我。檢測到無法檢測到的代碼返回值

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

回答

2

第一件事情是你有多個返回值,所以你的代碼將不起作用,所以你可以使用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

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

在C# ,方法一般只返回一個值。該值可以是具有多個字段的對象。

如果您需要從方法返回多個值,則可以使用out參數或返回包含所有值的類型實例。

由於Habib suggested,返回List<string>是一個很好的方法在你的情況。

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...? 
    } 
} 
0

是第一個return語句(同一區塊內)後編寫任何代碼將不會執行。如果你想從一個方法返回多個值,請考慮使用對象。

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

相關問題