当前位置: 首页 > 编程语言 > C#

结合return和switching分享

时间:2023-04-10 18:37:59 C#

结合return和switching如何结合return和switchcase语句?我想要类似returnswitch(a){case1:"lalala"case2:"blalbla"case3:"lolollo"default:"default"};我知道这个解决方案switch(a){case1:return"lalala";情况2:返回“blalbla”;情况3:返回“lolollo”;默认值:返回“默认值”;但我只想使用返回运算符。switch和return不能以这种方式组合,因为switch是一个语句,而不是一个表达式(即它不返回值)。如果你真的只想使用返回值,你可以创建一个字典来将开关变量映射到返回值:varmap=newDictionary(){{1,"lala"},{2,"lolo"},{3、“哈哈”},};字符串输出;返回map.TryGetValue(a,输出)?输出:“默认”;我相信这个解决方案是最直接的,你绝对应该使用它:switch(a){case1:return"lalala";情况2:返回“blabla”;情况3:返回“lololo”;默认值:返回“默认值”;但是既然你要求回报,你可以使用这个小流利类:publicclassSwitch{TElement_element;TElement_currentCase;IDictionary_map=newDictionary();公共开关(TElement元素){_element=元素;}publicSwitchCase(TElementelement){_currentCase=element;归还这个;}publicSwitchThen(TResultresult){_map.Add(_currentCase,result);归还这个;}publicTResultDefault(TResultdefaultResult){TResult结果;if(_map.TryGetValue(_element,outresult)){返回结果;}返回默认结果;}}创建这样的代码:returnnewSwitch(a).Case(1).Then("lalala").Case(2).Then("blabla").Case(3).Then("lololo").Default("default");不幸的是,编译器无法推导出类型参数,感觉有点笨拙。默认会触发“switch”的评估,并且必须是链中的最后一个方法调用。请注意,您始终需要默认值,因为您已切换到表达式。更新:您可以解决类型推断问题并驱动用户使用以下代码执行正确的操作:publicstaticclassSwitch{publicstaticSwitchBuilder.CaseBuilderOn(TElementelement){returnnewSwitchBuilder(element).Start();}公共类SwitchBuilder{TElement_element;TElement_firstCase;内部SwitchBuilder(TElement元素){_element=元素;}internalCaseBuilderStart(){returnnewCaseBuilder(){Switch=this};}privateThenBuilderCase(TElementelement){_firstCase=element;返回新的ThenBuilder(){Switch=this};}privateSwitchBuilder.CaseBuilderThen(TResultresult){returnnewSwitchBuilder(_element,_firstCase,result).Start();}公共类CaseBuilder{内部SwitchBuilder开关{得到;放;}publicThenBuilderCase(TElementelement){returnSwitch.Case(element);}}publicclassThenBuilder{内部SwitchBuilder开关{get;放;}publicSwitchBuilder.CaseBuilderThen(TResultresult){returnSwitch.Then(result);}}}公共类SwitchBuilder{TElement_元素;TElement_currentCase;IDictionary_map=newDictionary();内部SwitchBuilder(TElement元素,TElementfirstCase,TResultfirstResult){_element=element;_map.Add(firstCase,firstResult);}internalCaseBuilderStart(){returnnewCaseBuilder(){Switch=this};}privateThenBuilderCase(TElementelement){_currentCase=element;返回新的ThenBuilder(){Switch=this};}privateCaseBuilderThen(TResultresult){_map.Add(_currentCase,result);返回新的CaseBuilder(){Switch=this};}privateTResultDefault(TResultdefaultResult){TResult结果;if(_map.TryGetValue(_element,outresult)){返回结果;}返回默认结果;}公共类CaseBuilder{内部SwitchBuilder开关{得到;放;}publicThenBuilderCase(TElementelement){returnSwitch.Case(element);}publicTResultDefault(TResultdefaultResult){returnSwitch.Default(defaultResult);}}公共类ThenBuilder{内部SwitchBuilder开关{得到;放;}publicCaseBuilderThen(TResultresult){returnSwitch.Then(result);}}}}结果是这个漂亮的、类型安全的、流畅的界面;在每一步你只能选择正确的方法来调用(例如在Case之后):returnSwitch.On(a).Case(1).Then("lalala").Case(2).Then("blabla").Case(3).Then("lololo").Default("default");我通常这样做:varresult=null;switch(a){case1:result="lalala";休息;案例2:result="blalbla";休息;案例3:result="lolollo";休息;默认:结果=“默认”;休息;};返回结果;switch(a){案例1:返回“lalala”;"lololo";默认值:返回“默认值”;这是我能想到的最接近的:returna==1?“拉拉拉”:a==2?“blalbla”:a==3?“lolollo”:“默认”;我的映射解决方案看起来像Jord?o的解决方案,但它更灵活,更短returna.Map(1,"lalala").Map(2,"blabla").Map(3,"lololo").Else(string.Empty);这两个参数也可以是一个函数:returna.Map(x=>xx>=3,x=>"lololo"+x.ToString());//lololo3等我已经创建了一个Nuget包(FluentSwitch)来做你想做的事。因此,您可以执行以下操作:varresult=myValue.Switch().When(1,"lalala").When(2,"blalbla").When(3,"lolollo").Else("default")。价值();publicStringdoStaff(inta){switch(a){case1:return"lalala"case2:return"blalbla"case3:return"lolollo"default:return"default"};我们可能有一个用例,我们可能需要一个从开关写入的条件返回值;比方说:以上就是《C#学习教程:结合返回和切换》分享的全部内容,如果对大家有用,需要进一步了解C#希望大家多多关注教程——publicvoidSomeMethod(SomeTypeenumType){switch(enumType){casea:if(condition){if(condition1&&condition2){returntrue;}}返回假;//休息;如果在breakcaseb之前使用return,这里实际上不需要break:if(condition){if(condition3&&condition4){returntrue;}}返回假;//休息;默认值:返回假;//休息;}publicenumSomeType{a,b,c,d}本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: