摆脱try块中的条件语句

时间:2014-01-27 06:46:43

标签: c# wpf try-catch

我正在用c#构建我的第一个WPF应用程序。下面是包含try-catch块的代码的一部分。但是,它有代码重复。是否可以在try块中使用if-else语句而具有相同的功能。谁能建议一个更好的方法来做到这一点?也许我们可以抛出ArithmeticExceptions,但我是所有这些东西的新手,使用像(1/0)和(1%0)之类的异常直接给出错误。

目的:检查textbox3是否包含10位数字。如果是,则在texbox4中显示该数字以及其他一些数据。如果不是,则显示错误消息。

    private void Button_Click_1(object sender, RoutedEventArgs e)
    {
        try
        {

            textbox3.Text = (Convert.ToInt64(textbox3.Text)).ToString();
            if ((textbox3.Text).Length == 10)
            {
                textbox4.Text = textbox1.Text + Environment.NewLine + textbox2.Text + Environment.NewLine + textbox3.Text; 
            }

            else 
            {
                textbox3.Text = string.Empty;
                textbox4.Text = string.Empty;
                MessageBox.Show("Please, enter a 10 digit Contact No.", "Error");
            }
        }

        catch
        {
            textbox3.Text = string.Empty;
            textbox4.Text = string.Empty;
            MessageBox.Show("Please, enter a 10 digit Contact No.", "Error");
        }
    }

2 个答案:

答案 0 :(得分:2)

如果您的目标是测试textbox3.Text是否包含 10位数字,您可以使用正则表达式

  if (Regex.IsMatch(textbox3.Text, @"^\d{10}$")) 
    textbox4.Text = textbox1.Text + Environment.NewLine + 
                    textbox2.Text + Environment.NewLine + 
                    textbox3.Text; 
  else {
    textbox3.Text = string.Empty;
    textbox4.Text = string.Empty;
    MessageBox.Show("Please, enter a 10 digit Contact No.", "Error");
  }

答案 1 :(得分:0)

由于似乎只有Convert.ToInt64会抛出异常,我可能会做这样的事情。

bool error = false;
try
{       
    textbox3.Text = (Convert.ToInt64(textbox3.Text)).ToString();
}
catch
{ error = true; }

if ((textbox3.Text).Length == 10)
{
    textbox4.Text = textbox1.Text + Environment.NewLine + textbox2.Text + Environment.NewLine + textbox3.Text; 
}
else
    error = true;

if (error)
{
    textbox3.Text = string.Empty;
    textbox4.Text = string.Empty;
    MessageBox.Show("Please, enter a 10 digit Contact No.", "Error");
}