2016-04-22 6 views
1

В примере кода нашего профессора, он имеет один фрагмент кода, который выглядит следующим образом:В чем разница между ArgumentException и просто исключением?

if (name == null || name == "") 
    throw new ArgumentException("name is null or empty"); 

И еще один фрагмент кода, который выглядит следующим образом:

if (!File.Exists(name)) 
{ 
    throw new Exception("File does not exist!"); 
} 

мне было просто интересно, что отличается и почему один используется над другим

ответ

4

Exception - базовый класс для всех исключений. ArgumentException используется, чтобы сказать, что параметр недействителен. Он подклассы от Exception. С помощью catch вы можете фактически фильтровать базу по типу исключения и обрабатывать каждый по-разному.

MSDN описывает это хорошо:

Когда вы должны бросить исключение, вы часто можете использовать существующий тип исключения в .NET Framework вместо реализации пользовательских исключений. Вы должны использовать стандартный тип исключения при этих двух условиях:

  • Вы выбрасываете исключение, которое вызвано ошибкой использования (то есть, ошибка в логике программы, сделанные разработчиком, который звонит ваш метод) , Как правило, вы выбрали исключение, такое как ArgumentException, ArgumentNullException, InvalidOperationException или NotSupportedException. Строка, которую вы поставляете конструктору объекта исключения при создании экземпляра объекта исключения, должна описывать ошибку, чтобы разработчик мог ее исправить. Для получения дополнительной информации см. Свойство Message.
  • Вы обрабатываете сообщение об ошибке, которое может быть передано вызывающему абоненту с существующим исключением .NET Framework. Вы должны бросить самое производное исключение. Например, если для метода требуется, чтобы аргумент был допустимым членом типа перечисления, вы должны вывести исключение InvalidEnumArgumentException (наиболее производный класс), а не исключение ArgumentException.
0

Exception - базовый класс. Это просто самый общий вид исключения. Во многих случаях более конкретный тип может использоваться для получения дополнительной информации о том, какая ошибка произошла. В этом случае ArgumentException является типом исключения, указывающим на ошибку с аргументами.

TLDR: ArgumentException является типом Exception используется для предоставления более подробной информации

0

объекта является корнем всех вещей.

Существует много подтипов объекта. Исключение составляет один из них.

Существует много подтипов исключения. SystemException - один из них.

Существует много подтипов SystemException. ArgumentException - один из них.

Существует много подтипов исключения ArgumentException. ArgumentNullException и ArgumentOutOfRangeException являются двумя из них.

Если ваш профессор действительно хотел использовать наиболее явное исключение, они могли бы написать

if (name==null) throw new ArgumentNullException("name"); 
if (name=="") throw new ArgumentOutOfRangeException("name", name, "name cannot be zero length"); 
Смежные вопросы