我无法从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)'的返回类型错误
答案 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";
}
}