使用委托函数作为方法参数错误
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
作为参数。
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
作为参数。