2017-08-07 75 views
1

在隨機選擇玩家時出現問題。錯誤是無法將int轉換爲MyGame.player。 任何建議我應該怎麼做?試圖給玩家物品每5分鐘,但只有隨機1玩家,如果房間ID是20+

foreach (Player p in Players) 
{ 
    if (PlayerCount == 20) 
    { 
     AddTimer(delegate 
     { 
      try 
      { 
       var lol = p; 
       Random check = new Random(); 
       lol = check.Next(0, 20);     
      } 
      catch (ArgumentOutOfRangeException) 
      { } 
     }, 300000); 
    } 
} 
+0

請說明您認爲'哈哈= check.Next(0,20)什麼;'做。 – mjwills

+0

試圖從玩家獲得一個隨機ID。 – Kiyo

+1

錯誤很明顯。您正試圖爲玩家對象分配不值。這就是爲什麼你看到這個錯誤。你需要做'lol =播放器[check.Next(0,20)];' –

回答

1

Random.Next具有int作爲返回值:

返回值
類型:System.Int32
一個32位帶符號整數大於或等於minValue(最小值)和小於包括maxValue ;也就是說,返回值的範圍包含minValue,但不包含maxValue。如果minValue等於maxValue,則返回minValue。

您試圖將此值分配給類型爲Player的對象。這就是錯誤的原因。

到目前爲止,您正在運行每個玩家並選擇一個隨機數。如果你想有一個隨機的球員,你應該使用這個號碼作爲索引列表:

Random check = new Random(); 
int randomIndex = check.Next(0, 20); 

Player randomPlayer = Players.ElementAt(randomIndex) 
randomPlayer.ID = // <- here your ID 
+0

我得到這個錯誤不能應用索引與[ ]到一個表達式'ienumberable' Kiyo

+0

@Kiyo確定然後嘗試:'Players.ElementAt(randomIndex)'或'Players.ToList()(randomIndex)' –

+0

謝謝它工作:) – Kiyo