gpt4 book ai didi

c# - 向 button_click 函数添加可选参数

转载 作者:太空宇宙 更新时间:2023-11-03 21:26:19 26 4
gpt4 key购买 nike

我想向我的 button_click 函数添加一个可选参数,以便我可以通过从另一个函数调用它来插入其他信息。

代码如下:

    private void button1_Click(object sender, EventArgs e, string bla = "")
{
if (bla.Length > 0)
{
MessageBox.Show(bla);
}
else
{
MessageBox.Show("Hi!");
}
}
private void button1_trigger()
{
button1_Click(null, null, "hi");
}

我从 visual studio 2012 得到的错误 enter image description here enter image description here

最佳答案

虽然看起来您的代码应该可以工作(最后一个参数是可选的,因此“button1_Click”应该仍然与委托(delegate)匹配),但由于 C# 编译器的限制,它不会。即,编译器无法将方法与委托(delegate)匹配,其中方法具有重载或可选参数。 (这是有充分理由的——您可能认为优雅地处理这些情况会更复杂。Eric Lippert 在他的博客上写过关于这个主题的文章。)

我只想添加另一个适用于这两种情况的函数,并从处理程序中调用该函数:

private void trigger(object sender, EventArgs e, string bla = "")
{
if (bla.Length > 0)
{
MessageBox.Show(bla);
}
else
{
MessageBox.Show("Hi!");
}
}

private void button1_Click(object sender, EventArgs e)
{
trigger(sender, e);
}

private void button1_trigger()
{
trigger(null, null, "hi");
}

编辑

因此,如果您出于某种原因不想添加额外的函数,那么您可以使用 lambda 来添加处理程序:

this.button1.Click += (sender, args) => this.button1_Click(sender, args);

生成的编译代码实际上非常相似(我相信 C# 编译器会为匿名委托(delegate)添加另一个成员函数),但这种语法肯定更紧凑。

关于c# - 向 button_click 函数添加可选参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26792008/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com