1

我怎样才能为整个代码块有一个 return() 而不是在每个 if 块中都有一个 return。有人可以告诉我编写以下代码块的更好方法吗?

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

8 回答 8

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;

在我看来,这比单一的退货声明版本更容易理解。


我也质疑您选择0作为失败值的选择。null回到那个案子不是更有意义吗?并且object真的是返回值的正确类型吗?您没有可以使用的通用基类吗?

于 2013-11-12T18:13:50.987 回答
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;
}
于 2013-11-12T18:12:27.353 回答
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;
}

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

于 2013-11-12T18:13:43.353 回答
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;
于 2013-11-12T18:14:25.160 回答
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;
 }
于 2013-11-12T18:17:10.003 回答
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 ;
}

PS:你可以这样使用

public object GetHeaderInfo(string agentId, string headerName) //(string Mlsnums)
{
   return (headerName=="flyer"?Service.GetFlierHeaderInfo(agentId):headerName=="general"?Service.GetHeaderInfo(agentId):0);
}
于 2013-11-12T18:17:42.257 回答
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;
}

祝你好运!

于 2013-11-12T18:19:57.087 回答
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 ;
}
于 2013-11-12T18:32:15.523 回答