更新:2007 年 11 月
错误消息
前一个 catch 子句已经捕获所有异常。引发的所有异常均被包装在 System.Runtime.CompilerServices.RuntimeWrappedException 中如果 catch() 块在 catch (System.Exception e) 块后没有指定的异常类型,则该属性会导致 CS1058。该警告建议 catch() 块将不捕获任何异常。
如果在 AssemblyInfo.cs 文件中将 RuntimeCompatibilityAttribute 设置为 False,则 catch (System.Exception e) 块之后的 catch() 块可捕获非 CLS 异常:[assembly: RuntimeCompatibilityAttribute(WrapNonExceptionThrows = false)]。如果未将此属性显式设置为 False,则所有引发的非 CLS 异常将包装为异常,并且 catch (System.Exception e) 块将捕获它们。有关更多信息,请参见
示例
下面的示例生成 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. } } |