是否有(更清洁的)方法来整合C#中的多个条件?

时间:2015-05-28 19:14:27

标签: c#

我是C#的初学者,无法找到简单问题的答案。 MSDN对于我这个级别的人来说可能非常神秘,而且我没有专业人员可以处理这些常规问题。

这是我正在使用的代码示例:

while (ans != "a" || ans != "b" || ans != "c" || ans != "d");

有没有办法清理它?

5 个答案:

答案 0 :(得分:4)

您可以将这些字符串放在列表中,并检查答案是否在列表中

var list = new List<string>{"a", "b", "c", "d"};
while (!list.Contains(ans)) { ... }

评论提出了一个好点。从技术上讲,一个集合对于此任务更好,因为它可以非常快速地查找成员资格

var set = new HashSet<string>{"a", "b", "c", "d"};
while (!set.Contains(ans)) { ... }

答案 1 :(得分:1)

使用hashset / dictionary更快地完成你想做的事情,特别是如果列表或字符串很长:

var set = new HashSet<string>() {"a", "b", "c", "d"};
while (!set.ContainsKey(ans)) { ... }

答案 2 :(得分:0)

if(new List<string>{"a", "b", "c", "d"}.Any(x=> x == ans))

答案 3 :(得分:0)

&#34;如果给出了有效答案(a,b,c和d为有效答案),我需要不断评估的内容。&#34;

对我来说,如果答案是&#34; f&#34;,或者不是&#34; a&#34;,&#34; b&#34;,&#34; c&#34 ;或者&#34; d&#34;,您希望用户输入另一个答案。如果这是正确的那么你确实想要&amp;&amp;而不是||。

我只是检查输入的答案,反对字符&#39; a&#39; - &#39; d&#39;而不是一个字符串。这允许您跳过使用Lists,HashSets或Dictionaries。


Finding Podfile changes
  - OBShapedButton
  - ObjectAL-for-iPhone
  - UIMenuItem-CXAImageSupport
  - UIView-Autolayout

结果:


Resolving dependencies of Podfile
Finished resolution (0 steps) (Took 0.764299 seconds) (2015-05-28 17:33:19 -0500)
[!] Unable to find a specification for ObjectAL-for-iPhone (~> 2.5)

请参阅此处的工作示例... https://dotnetfiddle.net/us7D3K

答案 4 :(得分:-1)

作为警告,所有这些答案都牺牲了“清洁代码”的性能。这些答案都必须分配内存,然后将数组中的每个值与您的变量进行比较,该变量也有开销(尽管在较大的集合上使用set / dictionary会大大减少查找的开销)。 你发布的内容将是最有效的方式。但是,如果你选择保留你所拥有的订单,那么这些条件可以加快速度。由于只有其中一个条件需要为假而失败,因此您通常希望将它们按“最有可能首先失败”的顺序排列。