﻿# V3025\. Incorrect format\. Consider checking the N format items of the 'Foo' function\.

Анализатор обнаружил потенциальную ошибку при использовании функций форматирования: String\.Format, Console\.WriteLine, Console\.Write и т\.п\. Строка форматирования не соответствует передаваемым в функцию фактическим аргументам\.

Рассмотрим простые примеры:

**Неиспользуемые аргументы\.**

```cpp
int A = 10, B = 20;
double C = 30.0;
Console.WriteLine("{0} < {1}", A, B, C);
```

Не указан формат \{2\}, поэтому переменная 'С' не будет использована\.

Возможные варианты исправленного кода:

```cpp
//Удалим лишний аргумент
Console.WriteLine("{0} < {1}", A, B);

//Исправим строку форматирования
Console.WriteLine("{0} < {1} < {2}", A, B, C);
```

**Недостаточное количество аргументов\.**

```cpp
int A = 10, B = 20;
double C = 30.0;
Console.WriteLine("{0} < {1} < {2}", A, B);
Console.WriteLine("{1} < {2}", A, B);
```

Намного более опасной ситуацией является, когда в функцию передаётся меньше аргументов, чем необходимо\. Это приводит к исключению FormatException\.

Возможные варианты исправленного кода:

```cpp
//Добавим недостающий аргумент
Console.WriteLine("{0} < {1} < {2}", A, B, C);

//Исправим индексы в строке форматирования
Console.WriteLine("{0} < {1}", A, B);
```

**Анализатор не выдаёт предупреждение если\.\.\.**

1. Количество указанных форматов соответствует количеству аргументов\.
1. Объект форматирования используется несколько раз:

```cpp
int row = 10;
Console.WriteLine("Line: {0}; Index: {0}", row);
```

Пример ошибки в реальном приложении может выглядеть следующим образом :

```cpp
var sql = string.Format(
  "SELECT {0} FROM (SELECT ROW_NUMBER() " +
  " OVER (ORDER BY {2}) AS Row, {0} FROM {3} {4}) AS Paged ",
  columns, pageSize, orderBy, TableName, where);
```

В функцию передаются 5 объектов форматирования, но переменная 'pageSize' не используется, т\.к\. пропущен формат \{1\}\.