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

6 回答 6

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;
    }
}
于 2013-05-14T07:46:08.310 回答
2

首先是你有多个返回值,所以你的代码不起作用,所以你可以使用List<String>& 在 catch 情况下返回,你可以在方法定义的顶部使用 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
于 2013-05-14T07:53:23.557 回答
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();    
}

您可以参考该链接以进一步了解 C# 中的协程模式。

于 2013-05-14T08:03:36.447 回答
0

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

于 2013-05-14T07:53:15.200 回答
0

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

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

正如 Habib建议的那样,在您的情况下,返回List<string>是一个好方法。

于 2013-05-14T07:47:59.243 回答
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...?
  }
}
于 2013-05-14T07:49:53.043 回答