整个方法只有一个return()

时间:2013-11-12 18:09:29

标签: c#

如何为整个代码块设置一个return(),而不是在每个if块中都有一个返回值。有人可以告诉我编写以下代码块的更好方法。

 public object GetHeaderInfo(string agentId, string headerName) 
 {
     if (headerName == "flyer")
     {
        var headerInfo = Service.GetFlierHeaderInfo(agentId);
        // headerinfo is of type Flier object
        return headerInfo;
     }
     if (headerName == "general")
     {
         var headerInfo = Service.GetHeaderInfo(agentId);
         // headerinfo is of type report object
         return headerInfo;
     }
     return 0;
 }

8 个答案:

答案 0 :(得分:7)

回答问题的简单方法是:

object result = 0;
if (headerName == "flyer")
    result = Service.GetFlierHeaderInfo(agentId);
else if (headerName == "general")
    result = Service.GetHeaderInfo(agentId);
return result;

或者也许:

object result;
if (headerName == "flyer")
    result = Service.GetFlierHeaderInfo(agentId);
else if (headerName == "general")
    result = Service.GetHeaderInfo(agentId);
else
    result = 0;
return result;

那就是说,我认为你的代码比上面的代码好。实际上,多个return语句正是您对此函数的要求。这是一个不会改变状态的函数,它具有返回值的唯一任务。一旦你知道必须返回哪个值,就这样做,返回它。

我会这样写。

if (headerName == "flyer")
    return Service.GetFlierHeaderInfo(agentId);
if (headerName == "general")
    return Service.GetHeaderInfo(agentId);
return 0;

在我看来,这比单一的return语句版本更容易理解。


我还质疑您选择0作为落空值。在这种情况下返回null会更有意义吗?并且object真的是返回值的正确类型吗?你没有可以使用的公共基类吗?

答案 1 :(得分:2)

试试这个, 在没有条件匹配的情况下,使用默认值声明顶部的headerInfo,然后在条件中设置此变量,最后从函数返回。

public object GetHeaderInfo(string agentId, string headerName) //(string Mlsnums)
{
  object headerInfo = 0;
  if (headerName == "flyer")
  {
      headerInfo = Service.GetFlierHeaderInfo(agentId);
  }
  else if (headerName == "general")
  {
     headerInfo = Service.GetHeaderInfo(agentId);
  }
  return headerInfo;
}

答案 2 :(得分:2)

在方法的顶部声明它:

public object GetHeaderInfo(string agentId, string headerName)
{
    object headerInfo = 0;

    if (headerName == "flyer")
    {
        headerInfo = Service.GetFlierHeaderInfo(agentId);
    }
    if (headerName == "general")
    {
        headerInfo = Service.GetHeaderInfo(agentId);
    }

    return headerInfo;
}

默认值可以在初始化期间添加,它将被任何将来的分配覆盖。

答案 3 :(得分:1)

只需使用开关?

switch (headerName) {
   case "flyer" : return Service.GetFlierHeaderInfo(agentId);
   case "general" : return  Service.GetHeaderInfo(agentId);
   default: return 0;
}

只有一个回复(可读性较差,但这只是一个观点)。

object headerInfo = 0;

switch(headerName) {
     case "flyer" : headerInfo = Service.GetFlierHeaderInfo(agentId);
     break;
     case "general" : headerInfo = Service.GetHeaderInfo(agentId);
     break;
}
return headerInfo;

答案 4 :(得分:1)

 public object GetHeaderInfo(string agentId, string headerName) //(string Mlsnums)
 {
     object headerinfo;

     if (headerName == "flyer")
     {
         headerInfo = Service.GetFlierHeaderInfo(agentId);
         // headerinfo is of type Flier object
     }
     if (headerName == "general")
     {
         headerInfo = Service.GetHeaderInfo(agentId);
         // headerinfo is of type report object
     }
         return headerInfo ?? 0;
 }

答案 5 :(得分:1)

public object GetHeaderInfo(string agentId, string headerName) //(string Mlsnums)
{
   switch (headerName )
   {
    case "flyer":
    return Service.GetFlierHeaderInfo(agentId);

    case "general":
    return Service.GetHeaderInfo(agentId);

    default:
    return 0;
  }
}
编辑:我刚才注意到你想要一次回归......

public object GetHeaderInfo(string agentId, string headerName) //(string Mlsnums)
{
   var headerInfo = 0;
   switch (headerName )
   {
    case "flyer":
    headerInfo = Service.GetFlierHeaderInfo(agentId);

    case "general":
    headerInfo  = Service.GetHeaderInfo(agentId);
   }
 return headerInfo ;
}

P.S:您可以像这样使用它

public object GetHeaderInfo(string agentId, string headerName) //(string Mlsnums)
{
   return (headerName=="flyer"?Service.GetFlierHeaderInfo(agentId):headerName=="general"?Service.GetHeaderInfo(agentId):0);
}

答案 6 :(得分:1)

考虑...

public object GetHeaderInfo(string agentId, string headerName)
{
    object headerInfo = null;
    if (headerName == "flyer")
    {
        headerInfo = Service.GetFlierHeaderInfo(agentId);
    }
    if (headerName == "general")
    {
        headerInfo = Service.GetHeaderInfo(agentId);
    }
    return headerInfo;
}

祝你好运!

答案 7 :(得分:0)

尝试

public object GetHeaderInfo(string agentId, string headerName) 
{
  object instance ;

  switch ( headerName )
  {
  case "flyer"   : instance = Service.GetFlierHeaderInfo( agentId ) ; break ;
  case "general" : instance = Service.GetHeaderInfo(      agentId ) ; break ;

  default        : throw new ArgumentOutOfRangeException("headerName" ) ;
  }

  return instance ;
}