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

如果总是比较相同的东西,有没有办法缩短条件?分享

时间:2023-04-10 23:02:50 C#

如果总是比较相同的东西,有没有办法缩短条件?当我需要写一个条件来一遍又一遍地比较同一个项目时,我总是觉得很烦人,因为我会多次输入项目的类型:stringx=textBox1.Text;if(x=="apple"||x=="orange"||x=="banana"...)...我想要这样的东西(当然这不是正确的语法):if(x=="apple"||"orange"||"banana"...)是否有使用字符串数组的解决方案?你的案例说:如果我匹配任何预定义的值,我就是。换句话说,如果i是预定义集合的元素,它在语义上是Contains方法:if(new[]{"apple","orange","banana"}.Contains(x)){}可以提供更大的灵活性。您可以解压它、重复使用它、存储它、查询它等等。当我必须处理超过2个已知值时,我总是使用“数组和循环”。注意:正如ScottChamberlain在使用HashSet.Contains的评论中指出的那样可以极大地提高性能:varvalues=newHashSet{"apple","banana","orange"};if(values.Contains(x)){}扩展方法呢?publicstaticclassExtensions{publicstaticboolIsOneOf(thisTinput,paramsT[]possibilities){boolresult=possibilities.Contains(input);返回结果;然后你可以重写你的代码看起来像这样:stringinput=textBox1.Text;if(input.IsOneOf("apple","orange","banana")){//....}你最好的选择(就性能而言)是使用HashSetstaticHashSetFruits=newHashSet{"apple","香蕉","橘子"};字符串x=textBox1.Text;if(Fruits.Contains(x)){一旦在if条件中有超过三个或更多的可能性,HashSet将比直接比较运行得更快。您可以将重复的代码移动到那个方法,这也将解释为什么这段代码是重复的——因为它验证了某些东西是有成果的。它将提高代码的可读性和可维护性。您还可以重构此逻辑(例如,将其转换为switch语句):privateboolIsFruit(stringname){switch(name){case“apple”:case“orange”:...默认值:返回假;}}用法:字符串x=textBox1.Text;if(IsFruit(x))...更新:最好不要使用如此复杂的条件-有时真的很难理解。您可以使用IntroduceExplainingVariable或ExtractMethod(如上所述)重构来使您的代码更清晰。像这样使用switch语句switch(x){case"apple":case"orange":case"banana"://codebreak;你可以尝试switch语句:switch(x){case"apple":case"orange":case"banana"://...break;}你可以使用switch语句:switch(x){case"apple":case"orange":case"banana"://"if"codegoesherebreak;default://“else”代码放在这里break;}linq解决方案varstrarray=newstring[]{"apple","orange","banana"};boola=strarray.Any(x=>x==textBox1.Text);if(a)//CODEelse//code试试这样的switchcaseSwitch(value){case"apple":case"orange":case"banana":....//codeyouwantbreak;我喜欢扩展方法解决方案并且以前使用过它。这是我在“CommonUtils”库中提供的方法:publicstaticboolIsIn(thisTtoFind,IEnumerablecollection){returncollection.Contains(toFind);}publicstaticboolIsIn(thisTtoFind,ICollectioncollection){returncollection.Contains(toFind);}publicstaticboolIsIn(thisTtoFind,paramsT[]items){returntoFind.IsIn(items.AsEnumerable());在这三者之间,您几乎可以使用任何集合,也可以将Items指定为参数列表。你可以这样做:stringit="apple,orange,banana";if(it.Contains(x)){//dowork}更简单:以上是C#学习教程:如果总是比较相同的东西,有没有办法缩短条件?如果分享的所有内容对你有用,需要进一步了解C#学习教程,希望你多多关注——if("apple,orange,banana".Contains(x)){//dowork}这个文章来自网络收藏,不代表立场,如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: