Как определить пользовательское исключение синтаксического анализа, который содержит данные? - PullRequest
0 голосов
/ 27 февраля 2012

Я пытаюсь определить пользовательский класс исключения синтаксического анализа файла, в котором хранится информация - имя файла и строка файла, в которой происходит исключение.

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 Ответ

2 голосов
/ 27 февраля 2012

Во-первых, 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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...