2011-04-17 51 views
1
  List<Invaders> invadersShooting = new List<Invaders>(); 
     Invaders invaderA=new Invaders(); 
    try 
      { 
     var invaderByLocationX = from invadersSortByLocation in invaders 
           group invadersSortByLocation by invadersSortByLocation.Location.Y 
           into invaderGroup 
           orderby invaderGroup.Key 
           select invaderGroup; 

     if (invaderByLocationX != null) 
     { 

       invadersShooting = invaderByLocationX.Last().ToList();// it is being throwing constantly here.. How can i prevent it from being thrown 

       invaderA = invadersShooting[r.Next(0, invadersShooting.Count)]; 




       if (r.Next(5) < 4 - randomShot) 
       { 
        Invadershots.Add(new Shot(invaderA.Location, Direction.DOWN, gameBoundaries, WEAPON.DEFAULT, isWeapon)); 
       } 
     } 
      } 
    catch (Exception e) 
    { } 
    } 

我如何防止發生錯誤?我怎樣才能使程序檢查invaderByLocationX是空的?導致它是空序列,因此拋出異常:(出現InvalidOperationException(不含元素

+0

您可以做的一件事是在Visual Studio中的「var invaderByLocationX」旁邊設置一個斷點。如果您的應用程序在調試模式下運行,它有助於瞭解代碼中發生了什麼。 – 2011-04-17 10:03:46

+0

我知道發生了什麼事。它是空的..我需要防止Last()方法被應用,如果它是空的! – 2011-04-17 10:06:03

回答

2

你可以使用LastOrDefault這將返回null如果序列是空的。然後你要檢查空。

var invader = invaderByLocationX.LastOrDefault(); 
if(invader == null) 
{ 
    // do something 
} 
else 
{ 
    invaderA = invadersShooting[r.Next(0, invadersShooting.Count)]; 
    // etc 
} 

還要注意的是invaderByLocationX不能爲空,所以在不必要的空校驗。

+0

它的工作.. y。你的算法解決了問題! – 2011-04-17 10:18:15

相關問題