我有这个类,我定义了一个或多个我想作为委托传递的函数:
class Sports
{
public string judo(Player player, Venue venue)
{
//function body
}
}
这是一个带有一个方法的类,它可以接受这些函数之一作为委托:
public class Player
{
public void play(Venue venue,Func<Player,Venue,string> tournament)
{
string result = tournament(this,venue);
//do something with result
}
}
这是对该方法的调用,它传入一个合适的函数:
public void playJudo(Player player,Venue venue)
{
Sports sports=new Sports();
player.play(venue,sports.judo(player,venue));
}
这不编译; VS报告对player.play()
的调用具有无效参数。我不明白这一点 - judo()
返回一个字符串,play()
的标题将其定义为接受一个返回字符串的函数。这有什么不对?
答案 0 :(得分:1)
当您在Func<T1, T2, T3>
之类的参数中使用委托时,实际上您希望将函数作为参数传递,而不是结果功能。应用函数调用运算符,parens,调用函数。尝试类似:
public void playJudo(Player player, Venue venue)
{
Sports sports = new Sports();
player.play(venue, sports.judo);
}
答案 1 :(得分:0)
您正在传递sports.judo的返回值,这是一个字符串。使公共字符串柔道(播放器播放器,场地场地)成为静态方法或仅通过sports.judo