Отображение предупреждения, когда результат функции не назначен переменной - PullRequest
5 голосов
/ 02 августа 2011

У меня есть функция, которая возвращает измененную копию объекта, который вызвал эту функцию. Я часто делаю что-то вроде этого:

obj = obj.Foo(param);

Не спрашивай почему, мне просто нужно. Но иногда я (и другие) забывал присвоить результат функции, делая это:

obj.Foo(param);

, что многократно приводит к трудоемкой отладке.

Есть ли способ показать предупреждение или ошибку каждый раз, когда результат функции не назначен к переменной? Или какие-либо другие предложения, как решить эту проблему?

Ответы [ 5 ]

4 голосов
/ 02 августа 2011

Вы можете использовать параметр out, поэтому вызов будет выглядеть так:

obj.Foo(param, out obj);
3 голосов
/ 07 апреля 2015

Вы можете использовать Resharper, чтобы помочь с этой проблемой;вам нужно украсить ваш метод с помощью атрибута [Pure]:

[Pure]
public static IList<T> RemoveItem<T>(this IEnumerable<T> thisList, T item)
{
    var list = thisList.ToList();
    list.Remove(item);
    return list;
}

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

enter image description here

Атрибут [Pure] определен в аннотациях данных Resharpers: вам нужно скопировать классы в свой проект, чтобы вы могли ссылаться на них (многие очень полезные аннотации тоже)

enter image description here

2 голосов
/ 02 августа 2011

вы можете включить визуальные студийные предупреждения.

enter image description here

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

, вы также можете принять решение рассматривать обработку как ошибки

Пример:

  public static class MyClass
    {

      public static string GetStr()
       {
           return "";
       }
        public static void Main()
        {
            GetStr();
        }
    }

enter image description here

enter image description here

2 голосов
/ 02 августа 2011

Вполне допустимо и часто желательно не назначать возвращаемый параметр, поэтому было бы неправильно иметь предупреждение для него. Ответ Хенрика на использование параметра out - это то, что я бы тоже порекомендовал, чтобы результат присваивался каждый раз.

0 голосов
/ 04 апреля 2013

Я не могу комментировать ответы, так как не хватает стековых кредитов. Но я согласен с Крисом, что вполне законно и часто желательно не присваивать значения, возвращаемые методом. Это также иногда не желательно. например,

public static int Square(this int myValue)
{
    return myValue * myValue;
}

Понятно, что вызов этого метода без его присвоения, вероятно, является ошибкой. Я думаю, что создание правила анализа кода, предупреждающего каждый раз, когда вы не присваиваете значение, как предположил Массимилиано, было бы хуже, чем отсутствие правила вообще. В таких случаях было бы неплохо иметь возможность применить атрибут к методу ...

[MustAssign]
public static int Square...

Вы можете создать правило, как предложил Массимилиано, но вызывать предупреждение только тогда, когда метод украшен атрибутом, а значение, возвращаемое из метода, не назначено. Хотя это не тривиальное упражнение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...