2012-05-05 5 views
0

私は、次のコードを書かれている:この暗黙的な変換エラーは、タイプvoidからリスト<T>になる原因は何ですか?

public List<Card> DealCards(int numCardsToDeal) { 
      return shuffle.RemoveRange(0,numCardsToDeal-1); 

     } 

private List<Card> shuffle = new List<Card>() // class property deceleration. 

をしかし、それは次のエラーを生成します。

Cannot implicitly convert type 'void' to 'System.Collections.Generic.List'

私は理由を理解していません。私はちょうどshuffleを返すときに動作します。なぜそれが問題を解決するのですか?

+0

たぶん...... –

答えて

3

RemoveRangeはリストを変更し、何も返さないため、voidです。これは、新しいリストを返す多くのリストメソッドとは異なります。

あなたはカードを削除し、リストを返す次のコードは動作するはずです:

public List<Card> DealCards(int numCardsToDeal) 
{ 
    shuffle.RemoveRange(0,numCardsToDeal-1); 
    return shuffle; 
} 

shuffleが実際にあなたも何かを返す必要はありませんグローバルである場合。

1

RemoveRange methodは値を返しません。戻り値の型はvoidです。リストから指定された範囲を削除します。変更されたリスト、または削除されたオブジェクトを含むリストは返されません。

したがって、List<Card>を返す関数からvoidを返すことができないため、RemoveRangeメソッドの結果を返そうとするとエラーが発生します。

あなたが2行にアップあなたのコードを分割する必要があります:あなたのカードのクラスがIEnumerbaleプロパティを実装していないので、

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; 
} 
関連する問題