C# 从交换机内部返回是否有效?
以下是我的代码:C# 从交换机内部返回是否有效?,c#,C#,以下是我的代码: int getPos(string partOfSpeech) { var pos = 0; switch (partOfSpeech) { case "noun": pos = 1; break; case "verb": pos = 2; break; case "adjective":
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;
}
如果可能的话,我想简化一下。对我来说,从交换机内部执行返回操作是否有效(合理)?为了澄清
返回操作的作用:
:
return语句终止其出现的方法的执行,并将控制权返回给调用方法。它还可以返回可选值。如果方法是void类型,则可以省略return语句
因此return
将返回到调用方法,在何处使用它并不重要。它也在开关
语句中工作,即代替中断
命令。为了澄清返回
的作用:
:
return语句终止其出现的方法的执行,并将控制权返回给调用方法。它还可以返回可选值。如果方法是void类型,则可以省略return语句
因此return
将返回到调用方法,在何处使用它并不重要。它也在开关
语句中工作,即代替中断
命令。技术上是的,您可以使用返回
语句而不是中断
。尽管这是一个简单的解决方案,但想象一下从长远来看,这是否是一个明智的决策
你为什么想要五份而不是一份?从函数中有一个退出点,然后有五个退出点,看起来要干净得多。另外,如果有人在查看您的代码时想知道该方法存在于何处,这会让人感到困惑。如果您真的想简化上述方法,您可能需要完全重写它,以降低方法的圈复杂度。所以,类似这样的东西可能是有效的:
// Probably somewhere at the beginning of the class as a private global field
private Dictionary<string, int> _partOfSpeechDict;
public yourClassConstructor()
{
_partOfSpeechDict = new Dictionar<string, int>();
_partOfSpeechDict.Add("noun", 1);
_partOfSpeechDict.Add("verb", 2);
_partOfSpeechDict.Add("adjective", 3);
_partOfSpeechDict.Add("adverb", 4);
}
int getPos(string partOfSpeech)
{
var pos = 5; // For 'other' or default in your case
if (_partOfSpeechDict.ContainsKey(partOfSpeech))
{
pos = _partOfSpeechDict[partOfSpeech];
}
return pos;
}
//可能在类开头的某个地方作为私有全局字段
专用词典(peechdict的一部分),;
公共类构造函数()
{
_partOfSpeechDict=新字典();
_添加(“名词”,1);
_添加(“动词”,2);
_添加(“形容词”,3);
_添加(“副词”,4);
}
int getPos(语音的字符串部分)
{
var pos=5;//用于“其他”或您案例中的默认值
if(_partOfSpeechDict.ContainsKey(partOfSpeech))
{
pos=_部分语音信息[部分语音];
}
返回pos;
}
技术上是的,您可以使用return
语句而不是break
。尽管这是一个简单的解决方案,但想象一下从长远来看,这是否是一个明智的决策
你为什么想要五份而不是一份?从函数中有一个退出点,然后有五个退出点,看起来要干净得多。另外,如果有人在查看您的代码时想知道该方法存在于何处,这会让人感到困惑。如果您真的想简化上述方法,您可能需要完全重写它,以降低方法的圈复杂度。所以,类似这样的东西可能是有效的:
// Probably somewhere at the beginning of the class as a private global field
private Dictionary<string, int> _partOfSpeechDict;
public yourClassConstructor()
{
_partOfSpeechDict = new Dictionar<string, int>();
_partOfSpeechDict.Add("noun", 1);
_partOfSpeechDict.Add("verb", 2);
_partOfSpeechDict.Add("adjective", 3);
_partOfSpeechDict.Add("adverb", 4);
}
int getPos(string partOfSpeech)
{
var pos = 5; // For 'other' or default in your case
if (_partOfSpeechDict.ContainsKey(partOfSpeech))
{
pos = _partOfSpeechDict[partOfSpeech];
}
return pos;
}
//可能在类开头的某个地方作为私有全局字段
专用词典(peechdict的一部分),;
公共类构造函数()
{
_partOfSpeechDict=新字典();
_添加(“名词”,1);
_添加(“动词”,2);
_添加(“形容词”,3);
_添加(“副词”,4);
}
int getPos(语音的字符串部分)
{
var pos=5;//用于“其他”或您案例中的默认值
if(_partOfSpeechDict.ContainsKey(partOfSpeech))
{
pos=_部分语音信息[部分语音];
}
返回pos;
}
有一个要求(由编译器强制执行),所有的案例都必须结束。通常的方法是在中断时结束它(如示例中所示),但也存在其他可能性,例如:
goto
-显式跳转到另一个案例
抛出一个异常
- 和
返回
因此,是的,可以从case块内的函数返回。有一个要求(由编译器强制执行),即所有的case
都必须结束。通常的方法是在中断时结束它(如示例中所示),但也存在其他可能性,例如:
goto
-显式跳转到另一个案例
抛出一个异常
- 和
返回
因此,是的,可以从case块内的函数返回。是
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;
}
}
我认为这段代码可能也很有趣(在一行中)
或者,您可以声明一个枚举,并像这样使用它:
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;
}
对
我认为这段代码可能也很有趣(在一行中)
或者,您可以声明一个枚举,并像这样使用它:
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;
}
开关部分(即,案例块)的语句列表通常以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;
}
开关部分(即,案例块)的语句列表通常以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;
}
是的………是的,它是有效的,只要写上return“whatever”,我会尽量不养成使用switch语句的习惯,因为它们是一种很好的脱离实体的方法principles@Adwaenyth我不同意,当您有多个返回时,调试更容易,否则,您需要跟踪返回的某个变量,该变量可能会发生多次更改。@JamieR在复杂方法中有多个退出点,这使得在执行清理操作(如回滚)时很难断言