C# &引用;无法将方法组分配给隐式类型的局部变量";制作计算器

C# &引用;无法将方法组分配给隐式类型的局部变量";制作计算器,c#,C#,第二篇文章在这里,我最近开始了我的计算机课程,我们正在学习C#我已经了解到了所有的事情,我们有了我们应该学习的第一个项目,但是我在这里遇到了困难,我将向您展示整个代码供您阅读,然后我将从底部转到发现错误的部分: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using S

第二篇文章在这里,我最近开始了我的计算机课程,我们正在学习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
。我的重点是:

只有在同一语句中声明并初始化局部变量时,才能使用var;无法将变量初始化为null、方法组或匿名函数

在代码中,
按钮相等\u单击
是一个方法组

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

但是,很明显,您并不真正希望将方法组分配给局部变量。从这里我看不出你到底想干什么

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

因此,也许您需要做的是将if语句中的代码移动到
按钮quals\u Click
事件处理程序中。这样做时,仍然会有大量编译器错误,但这是朝着正确方向迈出的一步


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

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

如果用户输入“100”,然后点击乘法按钮,您如何计算任何内容


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

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


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

此行的目的是什么<代码>变量相等单击=按钮相等单击。这真的没有任何意义。。。您正在从
void
的事件处理程序中查找真/假结果?对,这就是我出错的地方,我的目标是在单击按钮Equals时运行if语句,if语句内部将是最终计算。若要检查是否按下ButtonEquals,可以检查事件的发送者。您已经有一个名为ButtonEquals\u Click的事件处理程序,当他们单击相应的按钮时应执行该处理程序。为什么这些代码会出现在ButtonTimes\u Click事件处理程序中?在
if(equalsclicked==true)
语句之后还有一个未闭合的花括号。对不起,我可能有点不清楚我的目标是什么,当单击按钮等于时,我的目标是让它运行IF语句,以便完成最终计算。我会尝试这样做,但这总是会导致我出现not in current context错误,除了将其放入同一代码块中之外,我从未找到解决方法。如果您需要两个事件处理程序中的信息,你必须想办法让双方都能使用。我试图解释你为什么收到错误信息。我无法为您编写程序的其余部分。您的根本问题是尚未完全掌握事件驱动编程。这就是你们接下来要做的。谢谢你们,这比我最初想的要大,不过你们能看到我要去哪里吗?但我意识到,由于这个错误,我不能再对其他操作员重复这个方法,所以我必须找到一个替代路线。我想我需要返回一点,现在我正在使用我们可以使用的所有资源,我们的老师说我们需要,这似乎有点过火,但这是有道理的,我只是