如何为整个代码块设置一个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;
}
答案 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 ;
}