我知道你可以在LINQ中使用Any,Exists和Single,但是不能让它工作。我需要根据id进行查找,看看它是否在数组中,并确保该值只有一个匹配。因为如果有2会导致问题..我正在检查的要求是数组中只有一个且只有一个ID在数组中。
这是我试过的
if(someIntArray.Single(item => item = 3)
//... we found the value 8 in the array only once so now we can be confident and do something
答案 0 :(得分:3)
以下是我将如何解决这个问题:
if (someIntArray.Count(item => item == 3) == 1)
{
//only one '3' found in the array
...
}
答案 1 :(得分:1)
我认为你是在思考这个问题。
var targetNumber = 3;
var hasExactlyOne = someIntArray.Count(i => i == targetNumber) == 1;
答案 2 :(得分:1)
我为这种情况创建了一个One()扩展方法集:
public static bool One<T>(this IEnumerable<T> sequence)
{
var enumerator = sequence.GetEnumerator();
return enumerator.MoveNext() && !enumerator.MoveNext();
}
public static bool One<T>(this IEnumerable<T> sequence, Func<T, bool> predicate)
{
return sequence.Where(predicate).One();
}
//usage
if (someIntArray.One(item => item == 3)) ...
Single()的问题在于,如果没有一个元素,它会引发异常。你可以将它包装在try-catch中,但是在大多数情况下,这些都是更多的匹配元素,它们比Count()更清晰,更有效。不幸的是,没有办法检查整个数组以验证没有元素或只有一个与谓词匹配,但如果有两个或更多,这将至少“快速失败”,其中Count()将始终评估整个Enumerable是否有一个匹配元素或50个。
答案 3 :(得分:0)
使用LINQ表达式:
var duplicates = from i in new int[] { 2,3,4,4,5,5 }
group i by i into g
where g.Count() > 1
select g.Key
结果:
{4,5}
当然,你可以检查duplicates.Count() > 0
或记录那些有问题或者你需要做的事情。
答案 4 :(得分:-2)
让它运转起来:
if(someIntArray.Single(item => item = 3) > 0)
DOH