All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.sonar.plugins.csharp.S2692.html Maven / Gradle / Ivy

There is a newer version: 9.32.0.97167
Show newest version

Why is this an issue?

Most checks against an IndexOf value compare it with -1 because 0 is a valid index.

strings.IndexOf(someString) == -1 // Test for "index not found"
strings.IndexOf(someString) < 0   // Test for "index not found"
strings.IndexOf(someString) >= 0  // Test for "index found"

Any checks which look for values > 0 ignore the first element, which is likely a bug. If the intent is merely to check the inclusion of a value in a string, List, or array, consider using the Contains method instead.

strings.Contains(someString) // bool result

This rule raises an issue when the output value of any of the following methods is tested against > 0:

someArray.IndexOf(someItem) > 0        // Noncompliant: index 0 missing
someString.IndexOfAny(charsArray) > 0  // Noncompliant: index 0 missing
someList.LastIndexOf(someItem) > 0     // Noncompliant: index 0 missing
someString.LastIndexOf(charsArray) > 0 // Noncompliant: index 0 missing

How to fix it

Code examples

Noncompliant code example

string color = "blue";
string name = "ishmael";

List<string> strings = new List<string>();
strings.Add(color);
strings.Add(name);
string[] stringArray = strings.ToArray();

if (strings.IndexOf(color) > 0) // Noncompliant
{
  // ...
}

if (name.IndexOf("ish") > 0) // Noncompliant
{
  // ...
}

if (name.IndexOf("ae") > 0) // Noncompliant
{
  // ...
}

if (Array.IndexOf(stringArray, color) > 0) // Noncompliant
{
  // ...
}

Compliant solution

string color = "blue";
string name = "ishmael";

List<string> strings = new List<string>();
strings.Add(color);
strings.Add(name);
string[] stringArray = strings.ToArray();

if (strings.IndexOf(color) > -1)
{
  // ...
}

if (name.IndexOf("ish") >= 0)
{
  // ...
}

if (name.Contains("ae"))
{
  // ...
}

if (Array.IndexOf(stringArray, color) >= 0)
{
  // ...
}

Resources

Documentation





© 2015 - 2024 Weber Informatics LLC | Privacy Policy