这是我的代码:
int getPos(string partOfSpeech)
{
var pos = 0;
switch (partOfSpeech)
{
case "noun":
pos = 1;
break;
case "verb":
pos = 2;
break;
case "adjective":
pos = 3;
break;
case "Adverb":
pos = 4;
break;
default:
pos = 5;
break;
}
return pos;
}
如果可能的话,我想简化一下。从交换机内部返回是否对我有效(且明智)?
答案 0 :(得分:2)
从技术上讲,您可以使用val m : N = new N
语句代替return
。虽然这是一个简单的解决方案,但想象一下,从长远来看,这是否是一个明智的决定。
为什么你想要五次而不是一次?从函数中有一个退出点然后五个看起来更清晰。此外,如果您想要简化上述方法,您可能需要完全重写它以降低方法的圈复杂度,这对于查看您的代码的人来说会很困惑。所以,这样的事情可能是有效的:
break
答案 1 :(得分:1)
是
int getPos(string partOfSpeech)
{
switch (partOfSpeech)
{
case "noun":
return 1;
case "verb":
return 2;
case "adjective":
return 3;
case "Adverb":
return 4;
default:
return 5;
}
}
我认为这段代码也很有意思(在一条线上)。
int getPos(string partOfSpeech)
{
return partOfSpeech == "noun" ? 1 : partOfSpeech == "verb" ? 2 : partOfSpeech == "adjective" ? 3 : partOfSpeech == "Adverb" ? 4 : 5;
}
或许你可以声明一个枚举并像这样使用它:
enum partOfSpeech
{
noun = 1,
verb = 2,
adjective = 3,
Adverb = 4
}
你可以通过枚举:
int getPos(partOfSpeech p)
{
return (int)p;
}
或字符串:
int getPos(string p)
{
partOfSpeech pos;
Enum.TryParse(p, out pos);
return (int)pos == 0 ? 5 : (int)pos;
}
答案 2 :(得分:0)
澄清return
做了什么:
return语句终止它出现的方法的执行,并将控制权返回给调用方法。它还可以返回一个可选值。如果方法是void类型,则可以省略return语句。
因此return
将返回调用方法,并且它在何处使用并不重要。它也适用于switch
语句,即代替break
命令。
答案 3 :(得分:0)
切换部分的语句列表(即大小写块)通常以break
,goto case
或goto default
结尾。但是,允许任何使交换机部分的端点不可达的构造。以下是有效的:
switch (id)
{
case 1:
// Some processing
throw new ArgumentException();
case 2:
// Some processing
return;
case 3:
// Some processing
goto case 4;
case 4:
// Some processing
goto default;
default:
// Some processing
break;
}
答案 4 :(得分:-1)
有一个要求(由编译器强制执行)所有case
肯定会结束。通常的方法是在break
上结束它(如在您的示例中),但存在其他可能性,例如:
goto
- 明确跳转到另一个case
throw
例外return
所以是的,可以从案例块中的函数返回。