导致此隐式转换错误的原因是从void类型到List <t>?</t>

时间:2012-05-05 12:50:41

标签: c# .net list generics

我写了以下代码:

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时,它会起作用。为什么这样可以解决问题?

2 个答案:

答案 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;
}