我有一个包含
的列表List<decimal> number= new List<decimal>();
number.Add(1);
number.Add(0);
number.Add(1);
除了使用LINQ的最后一个条目/列表节点之外,需要检查数字列表是否包含大于0的任何值
测试用例 1个 1个 0 =>假
0 0 1 =>真
我尝试过类似的事情
number.Where(s => s > 0).Skip(number.Count).Any()
将返回一个布尔值。但是这一行代码始终返回false。
答案 0 :(得分:1)
您可以通过仅考虑要处理的(number.Count-1)个值来跳过最后一个值,而不是从原始列表中删除值。例如。
public function handle_request() {
if ( ! $this->is_data_writable() ) {
return;
}
if ( ! $this->user_has_permissions() ) {
return;
}
if ( 'active' != $this->object->status ) {
return;
}
// do the stuff
}
答案 1 :(得分: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();
答案 2 :(得分:0)
跳过将跳过序列中的对象数目,而不是指定索引处的对象数目。 在这里,您将跳过序列中的所有对象,并询问是否存在任何对象。因此它总是返回false(假设示例中的变量defaultdata是变量号的错字)。
尝试一下。
var res = number.Where((num, index) => index != number.Count - 1 && num > 0).Any();
注意:由于我不是StackOverFlow的新手,因此我没有足够的声誉点可以发表评论。让我知道这是否回答了您的问题。
答案 3 :(得分:0)
如果您使用ID为“ System.Interactive”的NuGet Microsoft的交互式扩展,则可以执行以下操作:
var result = number.SkipLast(1).Where(x => x > 0).Any();