“无法将方法组分配给隐式类型的局部变量” 制作计算器

本文关键字:局部变量 类型 计算器 方法 分配 | 更新日期: 2023-09-27 18:35:39

这里的第二篇文章,所以我最近开始了我的计算课程,我们正在研究 C#,我已经了解了一切,我们有我们的第一个项目,我们应该处理,但是我在这里被难住了,我将向您展示整个代码供您阅读,然后我将在底部脱离到发现错误的部分:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace Calculator
{
public partial class Form1 : Form
{
    string number;
    public Form1()
    {
        InitializeComponent();
    }
    private void textBox1_TextChanged(object sender, EventArgs e)
    {
    }
    private void Form1_Load(object sender, EventArgs e)
    {
    }
    private void Number0_Click(object sender, EventArgs e)
    {
        number = number + "0";
        CalcForm.Text = number;
    }
    private void Number1_Click(object sender, EventArgs e)
    {
        number = number + "1";
        CalcForm.Text = number;
    }
    private void Number2_Click(object sender, EventArgs e)
    {
        number = number + "2";
        CalcForm.Text = number;
    }
    private void Number3_Click(object sender, EventArgs e)
    {
        number = number + "3";
        CalcForm.Text = number;
    }
    private void Number4_Click(object sender, EventArgs e)
    {
        number = number + "4";
        CalcForm.Text = number;
    }
    private void Number5_Click(object sender, EventArgs e)
    {
        number = number + "5";
        CalcForm.Text = number;
    }
    private void Number6_Click(object sender, EventArgs e)
    {
        number = number + "6";
        CalcForm.Text = number;
    }
    private void Number7_Click(object sender, EventArgs e)
    {
        number = number + "7";
        CalcForm.Text = number;
    }
    private void Number8_Click(object sender, EventArgs e)
    {
        number = number + "8";
        CalcForm.Text = number;
    }
    private void Number9_Click(object sender, EventArgs e)
    {
        number = number + "9";
        CalcForm.Text = number;
    }
    private void ButtonDecimal_Click(object sender, EventArgs e)
    {
        number = number + ".";
        CalcForm.Text = number;
    }
    private void ButtonTimes_Click(object sender, EventArgs e)
    {
        string equation1 = CalcForm.Text;
        double equation1int = Convert.ToDouble(equation1);
        CalcForm.Text = "";
        number = "";
        string equation2 = CalcForm.Text;
        double equation2int = Convert.ToDouble(equation2);
        var equalsclicked = ButtonEquals_Click;
        if (equalsclicked == true) 
        {
        CalcForm.Text = "";
        number = "";
        double answer = equation1int * equation2int;
        string answer1 = Convert.ToString(answer);
        CalcForm.Text = answer1;
    }
    }
    private void ButtonEquals_Click(object sender, EventArgs e)
    {
    }
}
}

所以,有表单代码,这是错误,我将在确切的行上发表评论

{
    string equation1 = CalcForm.Text;
    double equation1int = Convert.ToDouble(equation1);
    CalcForm.Text = "";
    number = "";
    string equation2 = CalcForm.Text;
    double equation2int = Convert.ToDouble(equation2);
    var equalsclicked = ButtonEquals_Click; //Here
    if (equalsclicked == true) //Here
    {
    CalcForm.Text = "";
    number = "";
    double answer = equation1int * equation2int;
    string answer1 = Convert.ToString(answer);
    CalcForm.Text = answer1;
}

有错误,你还能看出什么问题吗?还是优化明智?这只是为了乘法,但是一旦我这样做了,我可以轻松地复制它,谢谢:)

“无法将方法组分配给隐式类型的局部变量” 制作计算器

错误与编译器所说的完全一样。使用方法组初始化时不能使用 var。从文档中,我强调:

仅当在同一语句中声明和初始化局部变量时,才能使用变量;该变量不能初始化为 null、方法组或匿名函数。

在代码中,ButtonEquals_Click是一个方法组。

如果您希望使用方法组初始化变量,则必须显式声明变量的类型。

但是,很明显

,您并不真正希望将方法组分配给局部变量。你到底想做什么,我无法从这里辨别。

在我看来,你还没有完全掌握事件驱动的编程。您需要等到用户单击该按钮,然后在事件处理程序中响应该按钮单击。要了解的事件处理程序是系统调用它们,而您没有。

因此,也许您需要做的是将 if 语句中的代码移动到 ButtonEquals_Click 事件处理程序中。当你这样做时,你仍然会有很多编译器错误,但这是朝着正确方向迈出的一步。

我认为,下一步是尝试更多地理解事件驱动的编程。从一个空项目开始,添加几个按钮。添加执行不同操作的点击事件处理程序。例如,他们可能会使用不同的消息调用MessageBox.Show。然后运行程序并单击按钮。请注意,按钮事件处理程序仅在用户单击按钮时执行。然后看看你的代码。请注意,您的代码如何在 ButtonEquals_Click 事件处理程序中不执行任何操作,而是尝试从 ButtonTimes_Click 调用该事件。在继续操作之前,请确保完全了解框架调用事件以响应用户输入。

我认为这是一个比你想象的更复杂的项目。 当用户单击时间(乘法)按钮时,您还无法计算结果,因为他们尚未提供第二个操作数。

如果用户输入"100",然后点击乘法按钮,你怎么能计算任何东西?

当他们点击乘法时,您必须将他们输入的值存储为"旧"值,清除文本,并记住他们使用枚举变量单击乘法的事实。 然后,当他们执行下一个操作(例如单击等号)时,您将使用当前值(在本例中为旧值 * 新值)对旧值执行操作,并将结果存储在旧值中。

将程序视为基于事件的程序。每个函数基本上都是事件处理程序,正如我所看到的,您可以正确处理所有数字按钮单击事件和十进制按钮单击事件。但是,在事件处理程序 ButtonTimes_Click() 中,正如 David 指出的那样,您做错了。

我的建议是,在 ButtonTimes_Click() 中,您将存储运算符(代码中的等式 1 和等式 2)。然后在 ButtonEquals_Click() 中,您将根据之前保存的运算符进行乘法运算,并将结果分配回 CalcForm.Text 然后清除运算符。