0

ForEachから戻ることができません。コードは次のとおりです。

cards.ForEach(delegate(Card c){
    if (c.GetFaceValue().ToString() == card) {
        return "Your Card has been located";
    }

エラー:

ブロック内の一部の戻り型がデリゲート戻り型に暗黙的に変換できないため、匿名メソッドをデリゲート型'....Card>'に変換できません

CheckCardvoidのみを返すことができるため、以下も機能しません。

 cards.ForEach(CheckCard);

 public string CheckCard(Card c) {
        if (c.GetFaceValue().ToString() == card) { // card = global 
            return "Your Card has been located";
        }
    }

エラー:

'string SharedGamesClasses.Hand.CheckCard(SharedGamesClasses.Card)'の戻りタイプが間違っています

4

3 に答える 3

4

現在、呼び出し元のコードではなく、無名関数からメッセージを返そうとしています。匿名関数はであるためAction<T>、これは機能しません。これは何も返すことができません。

一致する要素があるかどうかを確認し、cards一致cardする場合はメッセージを返しますか?

.Any()の代わりに使用.ForEach()

if (cards.Any(c => c.GetFaceValue().ToString() == card))
{
    return "Your Card has been located";
}
于 2012-05-06T12:14:22.740 に答える
0

ForEachにはvoidがあります-値を返すことはできません。

アクションはのデリゲートショートカットです

public delegate void Action<in T>(
    T obj
)

ここのボイドに注意してください。

http://msdn.microsoft.com/en-us/library/bwabdf9z.aspx

public void ForEach(
    Action<T> action
)
于 2012-05-06T12:13:02.187 に答える
0

提供されているロジックを見ると、見つかったときにssonとして反復を終了するだけだと思いますCardforeachたとえば、次のように、これには単純なものを使用します。

string SomeFunc(IEnumerable<Card> cards) 
{
  foreach(Card in cards)
  {
     if(c.GetFaceValue().ToString() == card) {
        return "Your Card has been located";
  }
}
于 2012-05-06T12:16:30.383 に答える