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;
}
at&#34; string s = getInput(this.txtName.Text);&#34;我正面临着错误&#34;代表&#39; System.Func&#39;有一些无效的论据&#34; ....问题是什么...... 有人可以帮助我。
答案 0 :(得分:1)
您收到编译时错误,因为您已声明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;
}
答案 1 :(得分:0)
您不需要泛型,因为您将字符串作为输入参数传递并期望字符串作为输出参数:
Ext.define('MyApp.model.MyModel', {
extend: 'Ext.data.Model',
config: {
fields: [
{
name: 'dateTimeField',
type: 'string',
convert: function (value) {
if (value) {
if (Ext.isDate(value)) {
return Ext.util.Format.date(value, 'c');
} else if (Ext.isString(value)) {
var match = value.match(/(.+)\[.+\]/);
if (match && match[1]) {
return Ext.Date.parse(match[1], 'c');
}
}
}
}
}
]
}
});
答案 2 :(得分:0)
也许你的意思是
string s = getInput(this.txtName.Text)
而不是getInput
,因为后一个调用与TextBox
的签名不匹配,后者以2015-05-07 12:00:00 and 2015-05-08 09:00:00
为参数。