[英]Check a condition in list except for last entry using linq c#
我有一个清单包含
List<decimal> number= new List<decimal>();
number.Add(1);
number.Add(0);
number.Add(1);
需要检查数字列表是否包含大于0的任何值,使用LINQ的最后一个条目/列表节点除外
测试用例1 1 0 =>否
0 0 1 =>真
我尝试过这样的事情
number.Where(s => s > 0).Skip(number.Count).Any()
这将返回一个布尔值。 但是这一行代码始终返回false。
可以从仅考虑(number.Count-1)个值进行处理的方式来跳过最后一个值,而不是从原始列表中删除值。 例如。
List<decimal> number= new List<decimal>();
number.Add(1);
number.Add(0);
number.Add(1);
var exists = number.Take(number.Count-1).Any(x => x > 0);
因此,从“检查数字列表是否包含大于0的值(使用LINQ的最后一个条目/列表节点除外)”中了解到,您不想检查最后一个值,因此只需将其从列表中删除并检查其他项目即可:
List<decimal> number= new List<decimal>();
number.Add(1);
number.Add(0);
number.Add(1);
number.RemoveAt(number.Count - 1);
var exists = number.Any(x => x > 0);
或者,如果您只想检查最后一个元素:
number.Take(number.Count-1).Any(x => x > 0).Dump();
跳过将跳过序列中的对象数量,而不是指定索引处的对象数量。 在这里,您将跳过序列中的所有对象,并询问是否存在任何对象。 因此它总是返回false(假设示例中的变量defaultdata是变量号的错字)。
尝试这个。
var res = number.Where((num, index) => index != number.Count - 1 && num > 0).Any();
注意:由于我不是StackOverFlow的新手,因此我没有足够的声誉点可以发表评论。 让我知道这是否回答了您的问题。
如果您使用ID为“ System.Interactive”的NuGet Microsoft的交互式扩展,则可以执行以下操作:
var result = number.SkipLast(1).Where(x => x > 0).Any();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.