在C#中声明变量的位置

时间:2014-10-13 22:53:01

标签: c# visual-studio variables visual-studio-2013

我使用VS 2013 Pro创建了一个简单的计算器...这里是代码的一部分:

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 CalcTwo
{
public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();

    }


    string input = string.Empty;
    double numb1, numb2, result;


    private void button1_Click(object sender, EventArgs e)
    {
        double.TryParse(textBox1.Text, out numb1);
        double.TryParse(textBox2.Text, out numb2);
        result = numb1 + numb2;
        textBox3.Text = result.ToString();
    }

    private void button4_Click(object sender, EventArgs e)
    {
        double.TryParse(textBox1.Text, out numb1);
        double.TryParse(textBox2.Text, out numb2);
        result = numb1 - numb2;
        textBox3.Text = result.ToString();
    }
}
}

现在我面临的问题是,我还有两个用于乘法和除法的按钮,这又迫使我复制粘贴 double.TryParse(textBox1.Text, out numb1); double.TryParse(textBox2.Text, out numb2);

每个按钮

。我试图将代码与其他变量(双numb1,numb2,结果)放在一起但是收到错误... 这是截图

enter image description here

Here is the error message

Visual Studio和C#的新手。 感谢帮助! :)

1 个答案:

答案 0 :(得分:4)

变量的声明在类级别上很好。但是,为了减少代码重复,您可以将该特定功能提取到自己的方法中。也许是这样的事情:

private void CaptureValues()
{
    double.TryParse(textBox1.Text, out numb1);
    double.TryParse(textBox2.Text, out numb2);
}

然后在处理程序中:

private void button1_Click(object sender, EventArgs e)
{
    CaptureValues();
    result = numb1 + numb2;
    textBox3.Text = result.ToString();
}

这为您提供了放置其他代码的便利位置。检查输入并显示消息,例如:

private void CaptureValues()
{
    if (!double.TryParse(textBox1.Text, out numb1))
        // textBox1 couldn't be parsed, show an error message
    if (!double.TryParse(textBox2.Text, out numb2))
        // textBox2 couldn't be parsed, show an error message
}

您甚至可以更进一步,将值放入类级属性中。像这样:

private double Value1
{
    get
    {
        double result;
        if (!double.TryParse(textBox1.Text, out result))
            throw new Exception("Couldn't parse the first text box!");
        return result;
    }
}

private double Value2
{
    get
    {
        double result;
        if (!double.TryParse(textBox2.Text, out result))
            throw new Exception("Couldn't parse the second text box!");
        return result;
    }
}

有了这些,您根本不需要numb1numb2个变量,只需直接引用这些属性:

textBox3.Text = (Value1 + Value2).ToString();

目前,属性可以抛出异常,因此您可能希望处理:

try
{
    textBox3.Text = (Value1 + Value2).ToString();
}
catch (Exception ex)
{
    // examine what happened with ex and show an error
}

您可以提供更具体的Exception类型的课程,甚至是自定义课程。或者您可以在属性中而不是在处理程序中响应错误,而根本不使用异常。 (有一个论点要做,我同意它,永远不要使用普通逻辑的异常,这是潜在的其中一个边缘情况。如果它是正常的逻辑,不要使用异常。如果这是一个特例,并且值永远不会不可解析,请继续使用它们。在这种情况下,我更喜欢,但只是添加它作为一种可能性。)

有很多选择。