我是C#的初学者,无法找到简单问题的答案。 MSDN对于我这个级别的人来说可能非常神秘,而且我没有专业人员可以处理这些常规问题。
这是我正在使用的代码示例:
while (ans != "a" || ans != "b" || ans != "c" || ans != "d");
有没有办法清理它?
答案 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会大大减少查找的开销)。 你发布的内容将是最有效的方式。但是,如果你选择保留你所拥有的订单,那么这些条件可以加快速度。由于只有其中一个条件需要为假而失败,因此您通常希望将它们按“最有可能首先失败”的顺序排列。