如何定义自定义解析异常,它保存数据?

时间:2012-02-26 20:06:32

标签: c# exception

我正在尝试定义自定义文件解析异常类,该异常类用于保存信息 - 文件名和发生异常的文件行。

class FileParseException : Exception {
    string fileName;
    long lineNumber;
    public FileParseException() {
    }
    public string GetFileName() {
        return fileName;
    }
    public long GetLineNumber() {
        return lineNumber;
    }
}

我应该如何存储当前文件的数据以及何时上升异常以通过thy-catch块访问它:

try {
    // some code here
}
catch (FileParseException fpe) {
    Console.WriteLine(fpe.getLineNumber);
}

1 个答案:

答案 0 :(得分:2)

首先,C#具有属性,因此您应该使用它们,而不是创建GetXXX方法。在您的情况下,具有私有设置器的公共自动属性应该完成这项工作:

public string FileName { get; private set; }
public long LineNumber { get; private set; }

您可以在异常的构造函数中设置它们:

public FileParseException(string fileName, long lineNumber)
{
    FileName = fileName;
    LineNumber = lineNumber;
}

要抛出此类异常,请使用上面的构造函数:

throw new FileParseException(fileName, lineNumber);

当你抓住它时,你可以访问属性:

catch (FileParseException fpe)
{
    Console.WriteLine(
        "Error in file {0} on line {1}.", fpe.FileName, fpe.LineNumber);
}

此外,您应该通过将消息传递给基础构造函数来设置异常的Message

public FileParseException(string fileName, long lineNumber)
    : base(
        string.Format(
            "Error while parsing file {0} on line {1}.", fileName, lineNumber))
{
    FileName = fileName;
    LineNumber = lineNumber;
}