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

C# 如何定义保存数据的自定义解析异常?,c#,exception,C#,Exception,我试图定义自定义文件解析异常类,该类保存信息—文件名和发生异常的文件行 class FileParseException : Exception { string fileName; long lineNumber; public FileParseException() { } public string GetFileName() { return fileName; } public long GetLineNumbe

我试图定义自定义文件解析异常类,该类保存信息—文件名和发生异常的文件行

class FileParseException : Exception {
    string fileName;
    long lineNumber;
    public FileParseException() {
    }
    public string GetFileName() {
        return fileName;
    }
    public long GetLineNumber() {
        return lineNumber;
    }
}
我应该如何存储当前文件的数据,以及在出现异常时如何通过catch块访问该文件:

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);
}
此外,您可能应该通过将消息传递给基本构造函数来设置异常的
消息

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

当调用基构造函数时,属性不是未初始化的吗?@jgauffin,如果你是指我在调用
base()
时所说的,那么你是对的。这是一个复制粘贴错误,现在已经修复了。是的,这就是我的意思。太棒了