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

时间:2011-04-24 18:28:36

标签: c# linq

所以我的问题是我在这段代码中得到了一个无效的参数错误。它的意思是拿出一张牌并得到它们总价值的总和。然后,如果该值大于21,它会检查手中的任何牌是否是ace(或者类型是== ace并且它的牌totalVal == 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.First(n => n.Type == 13&& n.Total == 11)是真还是假?

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

谢谢

3 个答案:

答案 0 :(得分:5)

而不是First,请将Any与谓词一起使用。

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

答案 1 :(得分:2)

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

您需要致电FirstOrDefault,这可以返回null

答案 2 :(得分:2)

如果没有返回元素,您应该尝试使用FirstOrDefault而不是First.First会抛出错误。 还要检查CurrentCards是否为空。如果IEnumumerable为空,则First和FirstOrDefault都会给出ArguementNullException。