调用LINQ First()方法时出现InvalidArgument错误

本文关键字:InvalidArgument 错误 方法 LINQ First 调用 | 更新日期: 2023-09-27 17:53:14

所以我的问题是,我在这段代码中得到一个无效的参数错误。它的意思是拿一副牌,得到它们的总价值。然后,如果值大于21,它会检查手中的任何牌是否为ace(或者类型为== ace,并且它的cardtotalval == 11),现在我的问题是我为此编写的语句将运行,无论手中是否有ace并抛出错误。

我想知道是否有任何其他方式我可以写下面的语句,以使其正确运行?

        public int HandTotal()
        {
          int total = CurrentCards.Sum(n => n.Total);
          **while ( total > 21 && CurrentCards.First(n => n.Type == 13 && n.Total == 11) !=null)**
          {                
              CurrentCards.First(n => n.Type == 13).Total = 1;
              total = CurrentCards.Sum(n => n.Total);
              return total;
          }
          return total;
        }

我尝试了一些不同的事情,包括将!= null更改为> 0,但是这会抛出一个无效参数错误,说>不能与此语句一起使用。有没有其他的方法,我可以确定如果CurrentCards。第一个(n => n. type == 13 &&total == 11)是对还是错?

任何帮助或建议都是非常感谢的。

谢谢

调用LINQ First()方法时出现InvalidArgument错误

Any代替First

while(total > 21 && CurrentCards.Any(n => n.Type == 13 && n.Total == 11))

如果没有匹配的元素,First方法会抛出异常。

需要调用FirstOrDefault,它可以返回null

您应该尝试使用FirstOrDefault而不是First。如果没有返回任何元素,First将抛出错误。还要检查CurrentCards是否为空。如果ienumenumerable为空,First和FirstOrDefault都会给出一个argumementnullexception。