Как в C# запретить игнорирование возвращаемого значения функции?

Подскажите, как настроить анализатор c#, чтобы он выдавал ошибку компиляции, если возвращаемое значение функции не передаётся переменой?

Т.е., если есть функция

string GetMessage()
{
    return "Hello";
}

, то следующий вызов функции должен не компилироваться

// код
GetMessage();
// код

требуя, чтобы возвращаемое значение было передано в переменную

// код
var message = GetMessage();
// код

или было обозначено явно, что возвращаемое значение игнорируется

// код
_ = GetMessage();
// код

Ответы (1 шт):

Автор решения: Alexander Petrov

Навешиваем на метод атрибут Pure:

using System.Diagnostics.Contracts;

[Pure]
static string GetMessage()
{
    return "Hello";
}

Будет выдаваться предупреждение (warning) CA1806: Do not ignore method results.

В файле проекта указываем, чтобы этот ворнинг трактовался как ошибка: WarningsAsErrors

<WarningsAsErrors>CA1806</WarningsAsErrors>

Теперь не получится игнорировать возвращаемое значение.


Вместо атрибута Pure можно в файле .editorconfig указать проверку конкретного метода. Additional methods to enforce

dotnet_code_quality.CA1806.additional_use_results_methods = M:MyNamespace.MyType.GetMessage
→ Ссылка