针对多个值测试变量?

mow*_*ker 4 c# if-statement

我记得在这里看到一个关于同样问题的问题,其中包括:

if( x==null || x==" " || x==" " || x=="\n")...
Run Code Online (Sandbox Code Playgroud)

最终变得长而丑陋的字符串,但答案并不是很好,我不记得它是什么.

我正处于MySQL教程的中间,在SQL中解决问题的方法是使用关键字"IN".

WHERE value IN (1 , 22, 35)...
Run Code Online (Sandbox Code Playgroud)

所以我想知道它是否被认为是低效或不好的做法:

object[] BadVals = {null, " ", "  ", "\n"};
if(Array.IndexOf(BadVals, x) != -1)...
Run Code Online (Sandbox Code Playgroud)

Jon*_*Jon 6

它在理论上肯定不是直接if测试,但这是一个红色的鲱鱼.真正的问题是:你关心吗?

这个问题有两个方面.

  1. 那么如果它更慢呢?如果你不是在一个执行了一百万次的CPU绑定循环上运行它,那么差异纯粹是理论上的.使用任何产品可以获得更多无错误的代码,这些代码非常适合阅读和维护.
  2. 那么如果它更丑陋呢?你会写这么多次吗?当然不是 - 如果你打算多次使用它,把它放在一个名字很好的方法中,再也不用考虑了.

至于LINQ方法,它比你的方法略短,可读性更强:

if((new[] { null, " ", "  ", "\n" }).Contains(x)) ...
Run Code Online (Sandbox Code Playgroud)

您可能想要编写另一个扩展方法,允许您在操作数位置反转时调用它,例如

if(x.In(new[] { null, " ", "  ", "\n" })) ...
Run Code Online (Sandbox Code Playgroud)

结论:如果没有其他更明显的方法来检查这些值(例如在这种情况下IsNullOrWhiteSpace非常接近)并且没有明显的性能影响,我将使用LINQ来测试超过3个左右的值.否则,if尝试和真实.