我使用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,结果)放在一起但是收到错误... 这是截图
Visual Studio和C#的新手。 感谢帮助! :)
答案 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;
}
}
有了这些,您根本不需要numb1
或numb2
个变量,只需直接引用这些属性:
textBox3.Text = (Value1 + Value2).ToString();
目前,属性可以抛出异常,因此您可能希望处理:
try
{
textBox3.Text = (Value1 + Value2).ToString();
}
catch (Exception ex)
{
// examine what happened with ex and show an error
}
您可以提供更具体的Exception
类型的课程,甚至是自定义课程。或者您可以在属性中而不是在处理程序中响应错误,而根本不使用异常。 (有一个论点要做,我同意它,永远不要使用普通逻辑的异常,这是潜在的其中一个边缘情况。如果它是正常的逻辑,不要使用异常。如果这是一个特例,并且值永远不会不可解析,请继续使用它们。在这种情况下,我更喜欢,但只是添加它作为一种可能性。)
有很多选择。