繁体   English   中英

使用linq C#检查列表中除最后一项以外的条件

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM