Предупреждение компилятора (уровень 1) CS1058
Обновлен: Ноябрь 2007
Сообщение об ошибке
Предыдущее предложение catch уже перехватывает все исключения. Все возникшие исключения будут перенесены в System.Runtime.CompilerServices.RuntimeWrappedException
A previous catch clause already catches all exceptions. All exceptions thrown will be wrapped in a System.Runtime.CompilerServices.RuntimeWrappedException
Если в блоке catch() не задан тип исключения после блока catch (System.Exception e), установка данного атрибута приведет к возникновению ошибки CS1058. Данное предупреждение не рекомендует перехват исключений блоком catch().
Блок catch(), следующий за блоком catch (System.Exception e), может перехватывать исключения, отличные от CLS, если атрибуту RuntimeCompatibilityAttribute задано значение "false" в файле AssemblyInfo.cs: [assembly: RuntimeCompatibilityAttribute(WrapNonExceptionThrows = false)]. Если значение "false" задано неявно, все возникшие не CLS исключения упаковываются как исключения и блок catch (System.Exception e) перехватывает их. Дополнительные сведения см. в разделе Практическое руководство. Перехват несовместимого с CLS исключения.
Пример
В следующем примере возникает ошибка CS1058.
// CS1058.cs
// CS1058 expected
using System.Runtime.CompilerServices;
// the following attribute is set to true by default in the C# compiler
// set to false in your source code to resolve CS1058
[assembly: RuntimeCompatibilityAttribute(WrapNonExceptionThrows = true)]
class TestClass
{
static void Main()
{
try {}
catch (System.Exception e) {
System. Console.WriteLine("Caught exception {0}", e);
}
catch {} // CS1058. This line will never be reached.
}
}