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

时间:2015-05-11 07:31:15

标签: c# func

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; ....问题是什么...... 有人可以帮助我。

3 个答案:

答案 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 为参数。