Как уже отмечали другие, вы можете иметь оператор if
внутри блока catch, чтобы определить, что происходит. C # 6 поддерживает фильтры исключений, поэтому будет работать следующее:
try { … }
catch (Exception e) when (MyFilter(e))
{
…
}
Затем метод MyFilter
может выглядеть примерно так:
private bool MyFilter(Exception e)
{
return e is ArgumentNullException || e is FormatException;
}
В качестве альтернативы, все это можно сделать inline (правая часть оператора when просто должна быть логическим выражением).
try { … }
catch (Exception e) when (e is ArgumentNullException || e is FormatException)
{
…
}
Это отличается от использования оператора if
внутри блока catch
, использование фильтров исключений не будет разматывать стек.
Вы можете загрузить Visual Studio 2015 , чтобы проверить это.
Если вы хотите продолжить использование Visual Studio 2013, вы можете установить следующий пакет nuget:
Install-Package Microsoft.Net.Compilers
На момент написания, это будет включать поддержку C # 6.
Ссылка на этот пакет приведет к тому, что проект будет построен с использованием конкретной версии компиляторов C # и Visual Basic, содержащихся в пакете, в отличие от любой установленной версии системы.
По умолчанию проект Silverlight будет содержать dll System.Xml, однако XDcoument содержится в dll System.Xml.Linq, его необходимо добавить в свой проект.
Убедитесь, что вы добавили ссылку на соответствующую библиотеку XML