我怎么能抛出FormatException或OverflowException?

时间:2014-03-27 20:00:51

标签: c# exception-handling

到目前为止,这是我的语法:

static void Main(string[] args)
{
    // create a writer and open the file
    System.IO.StreamReader reader =
    new System.IO.StreamReader("c:\\Numbers.txt"); ;
    // open file in Output
    using (System.IO.StreamWriter file = new System.IO.StreamWriter(@"C:\Output.txt"))
    {
        string line;
        int Count = 1;
        while ((line = reader.ReadLine()) != null)
        {
            int y = Int32.Parse(line);
            if ((y % 2) == 0)
            {
                file.WriteLine(" Number " + y + " in line " + Count + " is even ");
            }
            else
            {
                file.WriteLine(" Number " + y + " in line " + Count + " is odd ");
            }
            Count++;
        }
        file.Close();
        reader.Close();
    }
}

我需要调用输出以下行的异常:

  

FormatException - 输入字符串的格式不正确。,行号= 10,字符串= ABC

     

OverflowException - 对于Int32,值太大或太小。行号= 11,字符串= 123456789012345678901234567890

     

FormatException - 输入字符串的格式不正确。,行号= 14,字符串= 4.0

任何人都可以帮助编写这些例外的地点和方法。

3 个答案:

答案 0 :(得分:1)

抛弃现有的例外System.FormatExceptionSystem.OverflowException

throw new FormatException("my message");

如果您只想向用户显示错误消息,请考虑使用消息框:

MessageBox.Show("my message");

答案 1 :(得分:0)

修复代码的最佳方法可能是使用int.TryParse而不是int.Parse。

http://msdn.microsoft.com/en-us/library/f02979c7(v=vs.110).aspx

如果输入不是字符串,可能最简单的方法是尝试解析为小数: - 如果仍然失败 - >不是数字 - 否则它是一个数字但不是int

答案 2 :(得分:0)

我的猜测是,您不希望有异常,但输出中包含有关每行包含错误的信息:

while ((line = reader.ReadLine()) != null)
{
    int y;
    if (int.TryParse(line, out y)) {
        if ((y % 2) == 0)
        {
            file.WriteLine(" Number " + y + " in line " + Count + " is even ");
        }
        else
        {
            file.WriteLine(" Number " + y + " in line " + Count + " is odd ");
        }
    } else {
        file.WriteLine(String.Format("Invalid formatted string in line number {0}: {1}", Count, line));
    }

    Count++;
}

当然,您可以添加一些额外的检查 - 但基本上您应该避免抛出异常,如果您希望某些行无效或者您希望通过一些注释优雅地跳过这些行。

以下是关于何时使用例外的好答案:When to throw an exception?