快速问题,编程问题的最佳方法是什么?"这个序列中是否只有一个元素满足X条件?" 使用Linq?
即
// Pretend that the .OneAndOnlyOne() method exists
int[] sequence = new int[] { 1, 1, 2, 3, 5, 8 };
Assert.IsTrue(sequence.OneAndOnlyOne(x => x == 2);
Assert.IsFalse(sequence.OneAndOnlyOne(x => x == 1);
Run Code Online (Sandbox Code Playgroud)
这样的事情可以通过以下方式完成:
sequence.SingleOrDefault(x => x == 2) != null;
Run Code Online (Sandbox Code Playgroud)
但那有点笨重.
我想我可以推出自己的扩展方法,但这似乎是我的代码中常见的模式,我想确保有一个很好的干净方法来做到这一点.有没有办法使用内置的LINQ方法?
Lee*_*Lee 35
你可以这样做:
bool onlyOne = source.Where(/*condition*/).Take(2).Count() == 1
Run Code Online (Sandbox Code Playgroud)
这将防止计数在多次匹配的情况下不必要地枚举大序列.
最简单的方法是使用Count.Single不适合你,因为如果不存在单个元素,它会抛出异常.
LBushkin建议(在评论中)使用SequenceEqual来比较序列与另一个序列.您可以通过使用Skip(1)跳过第一个元素并将结果序列与空序列(例如您可以从Empty获得的内容)进行比较来使用它