我写了以下代码:
public List<Card> DealCards(int numCardsToDeal) {
return shuffle.RemoveRange(0,numCardsToDeal-1);
}
private List<Card> shuffle = new List<Card>() // class property deceleration.
但它会产生以下错误:
无法将类型'void'隐式转换为'System.Collections.Generic.List'
我不明白为什么。当我返回shuffle
时,它会起作用。为什么这样可以解决问题?
答案 0 :(得分:3)
RemoveRange修改了列表并且没有返回任何内容 - 因此void
。在这里,它与许多返回新列表的列表方法不同。
以下代码可以删除卡片然后返回列表:
public List<Card> DealCards(int numCardsToDeal)
{
shuffle.RemoveRange(0,numCardsToDeal-1);
return shuffle;
}
如果shuffle
实际上是全球性的,您甚至不需要退货。
答案 1 :(得分:1)
RemoveRange
method不返回值 - 其返回类型为void
。它只是从列表中删除指定范围的元素。它不会返回修改后的列表,也不会返回包含已删除对象的列表。
因此,尝试返回RemoveRange
方法的结果会产生错误,因为您无法从应该返回void
的函数返回List<Card>
。
您需要将代码分成两行:
public List<Card> DealCards(int numCardsToDeal)
{
// First, remove the range of cards from the deck.
shuffle.RemoveRange(0,numCardsToDeal-1);
// Then, return the modified list.
return shuffle;
}