2016-07-27 62 views
-1

我確實遇到了使用我的類的兩個值來獲取List項目的問題。在List <>中查找包含兩個值的元素

類:

class Movement 
{ 
    public int movX; 
    public int movY; 

} 

代碼:

void checkMovement() 
{ 
    List<Movement> lstMovement = new List<Movement>(); 
    Movement currentMovement = new Movement(); 
    currentMovement.movX = 1; currentMovement.movY = 1; lstMovement.Add(currentMovement); 
    currentMovement.movX = 1; currentMovement.movY = 3; lstMovement.Add(currentMovement); 
    currentMovement.movX = 1; currentMovement.movY = 4; lstMovement.Add(currentMovement); 
    currentMovement.movX = 2; currentMovement.movY = 2; lstMovement.Add(currentMovement); 
    currentMovement.movX = 2; currentMovement.movY = 4; lstMovement.Add(currentMovement); 
    currentMovement.movX = 3; currentMovement.movY = 5; lstMovement.Add(currentMovement); 
    Movement curMovement = lstMovement.Find(item => item.movX == 1 && item.movY == 3); 
    Console.WriteLine(curMovement.movX + ", " + curMovement.movY); 
} 

如果我用一個值去Find,這個偉大的工程。

實施例爲這一個:

Movement curMovement = lstMovement.Find(item => item.movX == 3); 

的值是MOVX = 3和movY = 5

能否找到通過使用與此語法兩個表達式一個列表對象?

+5

這不是問題。問題是,OP重複使用同一個對象和參考列表中的每個值... –

回答

2

您forgott使用getter和setter方法,因此所有的屬性爲null。下面的代碼工作正常。

using System; 
    using System.Collections.Generic; 
    using System.Linq;      

    public class Movement 
    { 
     public int movX {get; set;} 
     public int movY {get; set;}  
    } 

    public class Program 
    { 
     public static void Main() 
     { 

      List<Movement> lstMovement = new List<Movement>();  

      lstMovement.Add(new Movement() {movX = 1, movY = 3}); 
      lstMovement.Add(new Movement() {movX = 1, movY = 3}); 
      lstMovement.Add(new Movement() {movX = 2, movY = 2}); 
      lstMovement.Add(new Movement() {movX = 2, movY = 4}); 
      lstMovement.Add(new Movement() {movX = 3, movY = 5});  

      var curMovement = lstMovement.FirstOrDefault(item => item.movX == 1 && item.movY == 3); 

      Console.WriteLine(curMovement.movX + ", " + curMovement.movY);  

     } 
    } 
+0

非常感謝:) –

0

使用& &

Movement curMovement = lstMovement.FirstOrDefault(item => item.movX == 3 && item.movY == 5); 
+0

如果您想要列出滿足對象條件的對象: 'var curMovementList = lstMovement.Where(item => item.movX == 3 && item.MovY == 5).ToList();' – MKasprzyk

+0

是的,這取決於他的具體要求 –

+0

這一個返回null:/ –

0

要重複使用相同的對象,並一遍又一遍地將它作爲commented by J. Steen。爲了解決這個問題,每次創建新實例:

lstMovement.Add(new Movement() { movX = 1, movY = 1 }); 
... 

爲了得到一個清單出來,使用Where

IEnumerable<Movement> curMovements = lstMovement.Where(item => item.movX == 3); 
0

您可以通過實現這一凡擴展方法等爲: -

  1. 如果你只關心然後第一項:

    Movement curMovement = lstMovement.FirstOrDefault(item => item.movX == 1 && item.movY == 3); 
    
  2. 如果您有興趣列表,然後

    List<Movement> curMovement = lstMovement.Where(item => item.movX == 1 && item.movY == 3).ToList(); 
    
相關問題