如何定义保存数据的自定义解析异常

本文关键字:自定义 异常 数据 保存 何定义 定义 | 更新日期: 2023-09-27 18:26:02

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

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

我应该如何存储当前文件的数据,以及当它引发异常以通过捕获块访问它时:

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

如何定义保存数据的自定义解析异常

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

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;
}