-1
所以我製作了一副帶有枚舉的卡片組。但現在我需要通過List<T>
刪除不同套裝中從2到6的所有卡片。這段代碼被給出:刪除卡組中的特定卡片
private void Window_Loaded(object sender, RoutedEventArgs e)
{
var d = new Deck();
Log(Converteer.ToString(d), "NIEUWE DEK");
// this works
d.RemoveNonManilleCards();
Log(Converteer.ToString(d, 8), "MANILLE-DECK");
// should be ->
// ♠A - ♠7 - ♠8 - ♠9 - ♠10 - ♠B - ♠D - ♠H
// ♥A - ♥7 - ♥8 - ♥9 - ♥10 - ♥B - ♥D - ♥H
// ♣A - ♣7 - ♣8 - ♣9 - ♣10 - ♣B - ♣D - ♣H
// ♦A - ♦7 - ♦8 - ♦9 - ♦10 - ♦B - ♦D - ♦H
而這是正在創建的套牌和刪除卡片的空白。但我認爲我完全錯了。
public partial class Deck : List<Card>
{
public Deck()
{
MakeDeck();
}
protected virtual void MakeDeck()
{
foreach (Suit k in System.Enum.GetValues(typeof(Suit)))
{
foreach (Rank n in System.Enum.GetValues(typeof(Rank)))
{
this.Add(new Card(k, n));
}
}
}
public void RemoveNonManilleCards()
{
foreach (Suit k in System.Enum.GetValues(typeof(Suit)))
{
foreach (Rank n in System.Enum.GetValues(typeof(Rank)))
{
this.RemoveRange(1, 5);
}
}
}
你們有人能指點我嗎?
這可能不正確,因爲我不知道你的枚舉是怎麼樣的,但你爲什麼不使用LINQ來刪除所有值爲2到6的卡? 'this.Where(card => c.Rank> 6 && c.Rank <1);' –
對於RemoveRange在foreach中沒有意義(排名 – Paparazzi
這不是一個答案,所以發表評論。實踐中,當通過索引(本例中爲List)從集合中移除時,最好是向後迭代集合,這樣可以防止集合被「摺疊」,並且剛剛移除的索引被再次填充以用於下一次迭代 –