2016-09-21 49 views
0

所以即時嘗試調用一個類到一個方法。但它很生氣,因爲這個方法不需要列表,我創建的類是一個列表。我試圖做一個單獨的變量,但不是一個列表,但它似乎沒有工作時,我跑的程序。c#調用一個類的列表到另一個類

它的「egg.BounceRock(岩石);」根據世界級運行方法;

世界級

public class World 
{ 

    private List<Rock> rocks; 
    private Egg egg; 
    private Board board; 

    private Graphics graphics; 
    public World() 
    { 
     egg = new Egg(); 
     board = new Board(); 
     rocks = new List<Rock>(); 
     rocks.Add(new Rock(graphics, new Point(RockstartX, RockstartY), Color.Black)); 
     rocks.Add(new Rock(graphics, new Point(Rock2startX, Rock2startY), Color.Black)); 
    } 
    public void Run() 
    { 
     foreach(Rock rock in rocks) 
     { 
      rock.Draw(); 
     } 
     egg.Draw(); 
     egg.BounceRock(rocks); 
     egg.BounceBoard(board); 
     egg.BounceFloor();   
    } 
} 

蛋類

public class Egg 
{ 

    public Egg() 
    { 

    } 
    public void Draw() 
    { 

    } 
    public void BounceFloor() 
    { 

    } 
    public void BounceBoard(Board board) 
    { 

    } 
    public void BounceRock(Rock rock) 
    { 

    } 
} 
+4

不清楚,如果方法接受一個'Rock',爲什麼要傳遞一個列表?提供一個接受列表的重載,傳遞一個'Rock'或者使用一個循環。 –

+0

你'公共無效BounceRock(搖滾搖滾)'應該像'公共無效BounceRock(IEnumerable 搖滾)' –

+0

'它生氣'<=也許你會生氣?個人電腦(*在個人電腦上運行的代碼)*不要生氣,如果你編寫了一些生氣的東西,請告訴我,因爲你將成爲第一個真正創建人工智能的人,這是一件非常酷的事情。 – Igor

回答

1
public class Egg 
{ 
    public void BounceRock(Rock rock) 
    { 
     // Bounce the rock... 
    } 

    public void BounceRocks(List<Rock> rocks) 
    { 
     foreach(Rock rock in rocks) 
     { 
      BounceRock(rock); 
     } 
    } 
} 

所以,你的蛋知道如何反彈單一的岩石,但它不知道如何反彈集合岩石...還沒有!通過添加一個以岩石列表作爲參數的新方法,您可以遍歷列表中的每個岩石並使用原始反彈方法來反彈每個岩石。

+1

而不是'List rocks',最好使用IEnumerable,因爲只要它可以被迭代,該方法並不關心它的List,Collection,Array等。 '公共無效BounceRocks(IEnumerable 岩石)' – Igor

+0

然後'BounceRock(搖滾搖滾)'應該是'私人'因爲看起來像你試圖封裝它 – Rahul

+0

@Igor完全同意,但故意保持它儘可能簡單OP – TVOHM