使用委托函数作为方法参数错误

Using delegate func as method parameter error

private void btnTest_Click(object sender, EventArgs e)
    {

        //Func<Employee, int> getId = (x => x.EmployeeId);
        Func<TextBox, string> getInput = (x => x.Text);
        txtName.Text = GetInput(getInput);
    }


private string GetInput<T>(Func<T, string> getInput)
    {
        string s = getInput(this.txtName.Text);
        return "Hello "+s;
    }

在 "string s = getInput(this.txtName.Text);" 行我遇到了错误 "Delegate 'System.Func' has some invalid arguments"... 问题是什么... 谁能帮帮我。

您收到编译时错误,因为您声明了 Func<T, string> getInput,但试图将 string 传递给它。

来自 https://msdn.microsoft.com/en-us/library/bb549151%28v=vs.110%29.aspx

public delegate TResult Func<in T, out TResult>( T arg )

您已将 getInput 声明为采用 T 参数的函数,但您正试图将其传递给 string

Func<T, string> getInput 在概念上可以表示为:

string getInput(T parameter)

我相信你可能打算做这样的事情:

private string GetInput(Func<TextBox, string> getInput)
{
    return String.Format("Hello {0}", getInput(this.txtName));
}

这里不需要泛型,因为您将字符串作为输入参数传递并期望字符串作为输出参数:

private string GetInput(Func<string, string> getInput)
{
    string s = getInput(this.txtName.Text);
    return "Hello "+s;
}

也许你的意思是

string s = getInput(this.txtName);

而不是 string s = getInput(this.txtName.Text),因为后一个调用与 getInput 的签名不匹配,后者采用 TextBox 作为参数。