Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/css/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将目标方法作为参数传递_C# - Fatal编程技术网

C# 将目标方法作为参数传递

C# 将目标方法作为参数传递,c#,C#,首先,我的英语不是很好,所以如果你能客气一点,我将不胜感激。谢谢 现在我的问题是,正如我在标题中所说的,我想在另一个方法中传递一个“方法名”作为参数。就像一张图片胜过千言万语一样,我的功能也有一大块: public void RemoveDecimalPoints(TextBox txtBoxName, Func<string, TextBox> txtBoxMethod) { //Some Code txtBoxName.KeyPr

首先,我的英语不是很好,所以如果你能客气一点,我将不胜感激。谢谢

现在我的问题是,正如我在标题中所说的,我想在另一个方法中传递一个“方法名”作为参数。就像一张图片胜过千言万语一样,我的功能也有一大块:

    public void RemoveDecimalPoints(TextBox txtBoxName, Func<string, TextBox> txtBoxMethod)
    {
        //Some Code

        txtBoxName.KeyPress += new KeyPressEventHandler(txtBoxMethod);
    }
对不起,如果我不清楚一些,我缺乏一些词汇


谢谢您的帮助。

假设您从包含
txtIncomeSelfValue1\u KeyPress
方法的同一类调用此
RemoveDecimalPoints
方法,您可以按如下方式传递它:

RemoveDecimalPoints(someTextBox, this.txtIncomeSelfValue1_KeyPress);
RemoveDecimalPoints(txtBoxName, txtIncomeSelfValue1_KeyPress);
void RemoveDecimalPoints(TextBox txtBoxName, string txtBoxMethod)
但是您必须修改签名,因为
Func
txtIncomeSelfValue1\u按键法不匹配:

public void RemoveDecimalPoints(TextBox txtBoxName, KeyPressEventHandler txtBoxMethod)
{
    //Some Code
    txtBoxName.KeyPress += txtBoxMethod;
}

如果您乐于这样编写代码:

RemoveDecimalPoints(someTextBox, this.txtIncomeSelfValue1_KeyPress);
RemoveDecimalPoints(txtBoxName, txtIncomeSelfValue1_KeyPress);
void RemoveDecimalPoints(TextBox txtBoxName, string txtBoxMethod)
然后您可以使用:

public void RemoveDecimalPoints(
    TextBox txtBoxName,
    KeyPressEventHandler txtBoxMethod)
{
    //Some Code

    txtBoxName.KeyPress += txtBoxMethod;
}
如果要使用
字符串
,则需要使用反射,并且签名需要如下所示:

RemoveDecimalPoints(someTextBox, this.txtIncomeSelfValue1_KeyPress);
RemoveDecimalPoints(txtBoxName, txtIncomeSelfValue1_KeyPress);
void RemoveDecimalPoints(TextBox txtBoxName, string txtBoxMethod)

不得不投你一票-你的答案(独立地)几乎和我的一模一样。:-)谢谢你的帮助!我用txtBoxName.KeyPress+=txtBoxMethod尝试了这个方法,但不是很好;我使用的是txtIncomeSelfValue1.KeyPress+=newkeypresseventhandler(txtBoxMethod);我差一点!哈哈^^