C#bool语句为看似未连接的double.parse(string)

时间:2015-06-12 13:23:48

标签: c# datetime boolean

对于C#来说,我是一个绝对的初学者。试图通过例子学习。所以我发现自己是一个不错的小计算器教程。在最后一刻,一切都很顺利,代码正在运行,但它不会像33那样进行多位数输入。那里有一个bool语句用于打开/关闭算术运算和教师指导,我们应该在数字输入/按钮按下之前放入bool = false(在button_Click中)。

他的代码如下:

public partial class MainWindow : Window
{
    double value = 0;
    string operation = "";
    bool operation_pressed = false;

    public MainWindow()
    {
        InitializeComponent();
    }

    private void button_Click(object sender, RoutedEventArgs e)
    {
        if ((tb.Text == "0") || (operation_pressed == true))
           tb.Clear();

        operation_pressed = false;
        Button b = (Button)sender;
        tb.Text += "\n" + b.Content.ToString();
    }

    private void operator_Click(object sender, RoutedEventArgs e)
    {
        Button b = (Button)sender;
        operation = b.Content.ToString();
        value = double.Parse(tb.Text);
        operation_pressed = true;
        equation.Content = value + " " + operation;
    }

    private void result_Click(object sender, RoutedEventArgs e)
    {

        equation.Content = "";
        switch(operation)
        {
            case "+":
                tb.Text = "\n" + (value + double.Parse(tb.Text)).ToString();
                break;
            case "-":
                tb.Text = "\n" + (value - double.Parse(tb.Text)).ToString();
                break;
            case "*":
                tb.Text = "\n" + (value * double.Parse(tb.Text)).ToString();
                break;
            case "/":
                tb.Text = "\n" + (value / double.Parse(tb.Text)).ToString();
                break;
            default:
                break;
        }
    }

    private void CE_Click(object sender, RoutedEventArgs e)
    {
        tb.Text = "\n 0";
    }

    private void C_Click(object sender, RoutedEventArgs e)
    {
        tb.Clear();
        equation.Content = "";
        value = 0;
    }
}

编译得很好。但是,当我尝试输入一个多位数并使用数学运算符跟随它时,它会抛出value = double.Parse(tb.Text);的异常,指出:

  

将字符串转换为DateTime时,解析字符串以在将每个变量放入DateTime对象之前获取日期。

我现在很困惑。甚至没有涉及DateTime!而且我100%肯定,一切都像教程中一样。发生了什么事? :/

任何帮助都将受到极大的赞赏!

修改

实际错误的屏幕截图:

The error

2 个答案:

答案 0 :(得分:5)

首先,您不正确地解释调试器。这是错误消息:

  

将字符串转换为DateTime时,解析字符串以在将每个变量放入DateTime对象之前获取日期。

请注意它是如何列为"故障排除提示"。在绝大多数情况下,您可以忽略它。错误信息本身是一种我不知道的语言,因此我无法说出它所说的内容。但FormatException本质上意味着您正在尝试解析无法解析的值。

您的屏幕截图会切断一些信息,但tb.Text的价值是多少?它是那些"+"字符串中的一个吗?如果是这样,那就是你的问题。

"+"无法解析为数值,因为" +"不是一个数字。

使用TryParse代替Parse,您可以使代码更能抵御错误。像这样:

double result;
if (!double.TryParse(tb.Text, out result))
{
    // couldn't parse
}

如果未输入if块,则result将包含成功解析的值。如果输入 ,则无法解析该值。你如何处理这种情况取决于你。给用户的错误消息,默认值而不是解析的值等。您可以定义的应用程序逻辑。

重点是,tb.Text包含一个非数字值,您尝试将其转换为数值。因此错误。

答案 1 :(得分:0)

在operator_Click事件中尝试此代码

Button b = (Button)sender;
operation = b.Text;
value = Convert.ToDouble(tb.text)