У меня есть метод, который принимает имя файла как параметр, все имена файлов должны заканчиваться на ".csv". Какое исключение я должен бросить, если имя файла, которое не заканчивается на .csv, передается?
Или я должен использовать другой подход?
У меня есть метод, который принимает имя файла как параметр, все имена файлов должны заканчиваться на ".csv". Какое исключение я должен бросить, если имя файла, которое не заканчивается на .csv, передается?
Или я должен использовать другой подход?
ArgumentOutOfRangeException - То, что вы описываете, соответствует исключению за пределами диапазона:
Исключение, которое вызывается, когда значение аргумента находится вне допустимый диапазон значений, как определено по вызываемому методу.
ArgumentException используется для проверки символов в строке пути, а не типа файла.
Параметр path является нулевой длиной строка, содержит только пробел или содержит один или несколько недопустимых символы.
IMHO диаграмма прокрутки проверки пути выглядит следующим образом:
Если этого недостаточно для описания, создайте свой собственный класс исключения:
public class InvalidFileTypeException : System.IO.IOException
{
public InvalidFileTypeException(string path, string acceptedTypeMask)
{
this.Message = string.Format(
"File type '{0}' does not fall within the expected range: '{1}'",
path,
acceptedTypeMask);
}
}
...
throw new InvalidFileTypeException("foo.txt", "*.csv");
ArgumentException будет соответствовать счету IMO.
Я бы использовал ArgumentException, так как это "Исключение, которое вызывается, когда один из аргументов, предоставляемых методу, не является действительный"
Проверьте документацию существующего метода ввода-вывода в Framework. Он описывает исключения, сгенерированные методом. Например, Конструктор StreamWriter.StreamWriter(String, Boolean, Encoding, Int32) в http://msdn.microsoft.com/en-us/library/0wf7ab94(VS.85).aspx. Исключение, которое я предлагаю вам использовать, чтобы оставаться последовательным, IOException. Затем вы можете добавить специальное сообщение, которое описывает данные.
IOException - путь содержит неправильный или недействительный синтаксис для имени файла, имени каталога или синтаксиса метки тома.
В вашем случае расширение файла неверно, поэтому сообщите об этом пользователю, как в Throw New IOException("Invalid file extension.")
.
Я бы оставил ArgumentException, как описано в документации, путь - пустая строка ("").
См. Выбор правильного типа исключения для броска в http://msdn.microsoft.com/en-us/library/ms229021.aspx.
System.ArgumentException
представляется подходящим, либо напрямую, либо как базовый класс для вашего исключения.
Как просто создать свой собственный InvalidFilenameException
? Например:
public class InvalidFilenameException : Exception
{
public string Filename { get; private set; }
public InvalidFilenameException(string message, string invalidFilename)
:base(message)
{
Filename = invalidFilename;
}
}