# V3138. String literal contains potential interpolated expression.

Анализатор обнаружил строку, которая могла бы содержать интерполированное выражение, но символ интерполяции '$' у литерала отсутствует.

Рассмотрим фрагмент кода:

    string test = "someText";
    ....
    Console.WriteLine("{test}");

Из-за пропущенного знака '$' перед объявлением строки в консоль будет выведено имя переменной. Корректная запись будет выглядеть так:

    string test = "someText";
    ....
    Console.WriteLine($"{test}");

Также потенциальными ошибками считаются строки, содержащие выражения:

    int a = 1;
    int b = 1;
    string test = "{a:c} test";
    string test1 = "{a+b} test1 {{{ a + b }}}";

Исключениями считаются строковые литералы, передаваемые в методы в качестве аргумента, когда другими аргументами этих методов являются переменные, содержащиеся в этом литерале.

    string test1 = ReplaceCustom("someText {test}", "{test}", test);

В этом случае выражение в литерале часто бывает меткой для замены на значение переменной, также передаваемой в метод.

Взгляните на примеры ошибок, обнаруженных с помощью диагностики V3138.