Сводные комментарии и ссылки на локальные функции не работают - PullRequest
0 голосов
/ 06 марта 2020

Как вы знаете, в C# 7.0 добавлено несколько новых функций Одной из них являются локальные функции. Я просмотрел несколько примеров и примеров использования локальных функций и нашел две причины их использования:

1) Скрыть функцию или метод. Причина в том, что если бы функция не была локальной, то другие члены могли бы случайно использовать напрямую

2) Использовать переменные функции «Родитель»

Во время отладки в рефакторинг кода Я не смог найти ссылки на локальные функции в Visual Studio. Есть ссылки на приватную функцию:

private function

Помогает при отладке или рефакторинге кода. В локальных функциях я не смог их найти:

local function

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

Некоторым программистам нравилось использовать локальные функции, но некоторые нет. Вот пример (из Что нового в C# 7.0 |. NET Блог ):

 public IEnumerable<T> Filter<T>(IEnumerable<T> source, Func<T, bool> filter)
    {
        if (source == null) throw new ArgumentNullException(nameof(source));
        if (filter == null) throw new ArgumentNullException(nameof(filter));

        return Iterator();

        IEnumerable<T> Iterator()
        {
            foreach (var element in source)
            {
                if (filter(element)) { yield return element; }
            }
        }
    }

В этом случае причина использования локальной функции:

Если бы Iterator был закрытым методом рядом с Filter, другие члены могли бы использовать его случайно (без проверки аргументов). Кроме того, потребовалось бы принять все те же аргументы, что и Filter, вместо того, чтобы они просто находились в области видимости

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

    public IEnumerable<T> Filter<T>(IEnumerable<T> source, Func<T, bool> filter)
    {
        if (source == null) throw new ArgumentNullException(nameof(source));
        if (filter == null) throw new ArgumentNullException(nameof(filter));

        #region Iterating

        foreach (var element in source)
        {
            if (filter(element)) { yield return element; }
        }

        #endregion
    }

1 Ответ

0 голосов
/ 06 марта 2020

Согласно msdn

Для вставки XML комментариев для элемента кода

  1. Поместите текстовый курсор над элементом например, вы хотите задокументировать метод.

  2. Выполните одно из следующих действий:

    • Введите /// in C#, или '' 'в Visual Basi c

    • В меню «Правка» выберите IntelliSense> Вставить комментарий

    • Щелкните правой кнопкой мыши или В контекстном меню или над элементом кода выберите «Фрагмент»> «Вставить комментарий»

Я протестировал все 3 способа добавления комментария, но ни один из них работает на локальном функционале.

  1. Если вы попытаетесь вставить "///", IDE не создаст итоговый узел.
  2. Если вы попытаетесь использовать интер-комментарий либо в меню редактирования или щелкнув правой кнопкой мыши контекстное меню, вы добавите сводку по основной функции, а не по локальной функции.

Однако в документе не упоминается отказ от ответственности по поводу "not support" нг локальная функция ".

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