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

C#,如果(a==(b或c或d)),是否可以?分享

时间:2023-04-11 01:48:10 C#

C#。如果(a==(b或c或d))。是否可以?有没有其他方法可以这样写:if(a==x||a==y||a==z)我发现的一种方法是这样做:if(new[]{x,y,z}.Contains(a))还有什么好的方法吗?我经常使用模仿SQLIN的扩展方法:publicstaticboolIsIn(thisTobj,paramsT[]collection){returncollection.Contains(obj);}所以我可以做if(a.IsIn(b,c,d)){...}你有经典的switch语句:纯粹的乐趣:使用系统;staticclassProgram{staticboolIn(thisobjectobj,paramsobject[]values){foreach(objectvalueinvalues){if(obj.Equals(value)){返回真;}}返回假;}staticvoidMain(string[]args){booltest1=3.In(1,2,3);booltest2=5.In(1,2,3);但我真的认为最好的方法是写listif(a==x||a==y||a==z)每个人都会立即明白这是做什么的。覆盖它的解决方案if(new[]{x,y,z}.Contains(a))不是一个好的举措。您采用了每个程序员都可以轻松理解的简单高效的逻辑操作,并包括短路逻辑以加快速度,而您生成的代码需要一些时间才能理解,而且效率要低得多。如果您不尝试变得“聪明”,有时您的同事会喜欢它!考虑一种情况,其中a==x以及y和z是求值缓慢且昂贵的函数。如果有用于创建惰性求值序列(IEnumerable)的优雅语法,则.Contains()的“技巧”会更有用。即收益回报x;yieldreturny;...yieldreturnx;yieldreturny;...,但内联且更短。那么,您是否想用更慢且可能引发异常的东西替换包含短路优化的简单、高效的语言构造?但是,如果要比较的项目数不固定,即在运行时它可能是t、u、v、w、x、y、z等,那么Collection.Contains方法是唯一的选择,但你是传递集合对象而不是单个值,因此内存分配非常少。如果您有大量项目要与“a”进行比较,但这些项目在运行时不是动态的,那么switch语句可能更合适。为什么你需要另一种方式?由于这不是功能问题,我想重点是提高可读性。如果您有一些具有有意义名称的变量,则使用==进行比较更具可读性。如果你有更多,你可以像控制样本一样使用Contains作为列表。另一种方法是与枚举标志进行比较:[Flags]publicenumSize{Small=1,Medium=2,Large=4}然后找出mySize是Small还是Medium:selectedSizes=Size.Small|尺寸。中号;mySize=Size.Small;if(mySize&selectedSizes){...}if(a==x?true:a==y?true:a==z?true:false)试试这个varres2=new[]{1,2,3}.Any(x=>x==2);例如,您的逻辑如下所示:if(a==x||a==y||a==z){DoSomething();}else{DoOtherThings();}相当于:if(a!=x&&a!=y&&a!=z){DoOtherThings();}else{DoSomething();干杯。以上就是C#学习教程:C#。如果(a==(b或c或d))。是否可以?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: