我使用此委托的语法有什么问题?

时间:2014-03-06 01:46:23

标签: c# visual-studio-2013

我有这个类,我定义了一个或多个我想作为委托传递的函数:

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()的标题将其定义为接受一个返回字符串的函数。这有什么不对?

2 个答案:

答案 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