Why is this an issue?
The rule is reporting when an exception is thrown from certain methods and constructors. These methods are expected to behave in a specific way and throwing an exception from them can lead to unexpected behavior and break the calling code.
public override string ToString()
{
if (string.IsNullOrEmpty(Name))
{
throw new ArgumentException(nameof(Name)); // Noncompliant
}
//...
}
An issue is raised when an exception is thrown from any of the following:
- ToString
- Object.Equals
- IEquatable.Equals
- GetHashCode
- IDisposable.Dispose
- Event accessors
- static constructors
- Module initializer attribute
- https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/operators/operator-overloading
- implicit cast operators
Exceptions
Certain exceptions will be ignored in specific contexts, thus not raising the issue:
System.NotImplementedExceptionand its derivatives are ignored for all the aforementioned.System.InvalidOperationException,System.NotSupportedException, andSystem.ArgumentExceptionand their derivatives are ignored in event accessors.