rspec/rules/S2291/csharp/rule.adoc
Fred Tingaud 16f6c0aecf
Inline adoc when include has no additional value (#1940)
Inline adoc files when they are included exactly once.

Also fix language tags because this inlining gives us better information
on what language the code is written in.
2023-05-25 14:18:12 +02:00

100 lines
2.0 KiB
Plaintext

== Why is this an issue?
``++Enumerable.Sum()++`` always executes addition in a ``++checked++`` context, so an ``++OverflowException++`` will be thrown if the value exceeds ``++MaxValue++`` even if an ``++unchecked++`` context was specified. Using an ``++unchecked++`` context anyway represents a misunderstanding of how ``++Sum++`` works.
This rule raises an issue when an ``++unchecked++`` context is specified for a ``++Sum++`` on integer types.
=== Noncompliant code example
[source,csharp]
----
void Add(List<int> list)
{
int d = unchecked(list.Sum()); // Noncompliant
unchecked
{
int e = list.Sum(); // Noncompliant
}
}
----
=== Compliant solution
[source,csharp]
----
void Add(List<int> list)
{
int d = list.Sum();
try
{
int e = list.Sum();
}
catch (System.OverflowException e)
{
// exception handling...
}
}
----
=== Exceptions
When the ``++Sum()++`` call is inside a ``++try-catch++`` block, no issues are reported.
[source,csharp]
----
void Add(List<int> list)
{
unchecked
{
try
{
int e = list.Sum();
}
catch (System.OverflowException e)
{
// exception handling...
}
}
}
----
ifdef::env-github,rspecator-view[]
'''
== Implementation Specification
(visible only on this page)
=== Message
Refactor this code to handle "OverflowException".
'''
== Comments And Links
(visible only on this page)
=== on 13 Apr 2015, 10:44:27 Freddy Mallet wrote:
@Tamas, according to you, does this rule makes sense ? Thanks
=== on 29 Jun 2015, 14:58:19 Tamas Vajk wrote:
\[~ann.campbell.2] I've modified the description to be more specific. Also, I've changed the examples to use ``++List<int>++`` because for ``++double++``s it won't throw the ``++OverflowException++``.
\[~freddy.mallet] Yes, the rule makes sense.
=== on 30 Jun 2015, 14:45:28 Ann Campbell wrote:
Double-check my edits please [~tamas.vajk]
=== on 6 Jul 2015, 09:33:41 Tamas Vajk wrote:
\[~ann.campbell.2] Looks good.
endif::env-github,rspecator-view[]