ForEach匿名函数,无法返回

时间:2012-05-06 12:11:15

标签: c# .net linq

我无法从ForEach返回,这是我的代码:

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

错误:

  

无法将匿名方法转换为委托类型'... .Card>'因为块中的某些返回类型不能隐式转换为委托返回类型

以下内容也无法正常工作,因为CheckCard只能返回void:

 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)'的返回类型错误

3 个答案:

答案 0 :(得分:4)

您目前正在尝试从匿名函数而不是您的调用代码返回消息;这不起作用,因为匿名函数是Action<T>,它不能返回任何内容。

您是否只想查看cards中的任何元素是否与card匹配,如果是,则返回该消息?

使用.Any()代替.ForEach()

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

答案 1 :(得分:0)

ForEach有一个空白 - 你无法返回一个值。

操作是

的委托快捷方式
public delegate void Action<in T>(
    T obj
)

注意这里的空白。

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

public void ForEach(
    Action<T> action
)

答案 2 :(得分:0)

查看提供的逻辑,我假设您将以找到Card的sson终止迭代。只需使用简单的foreach,例如:

string SomeFunc(IEnumerable<Card> cards) 
{
  foreach(Card in cards)
  {
     if(c.GetFaceValue().ToString() == card) {
        return "Your Card has been located";
  }
}