2

如您所知,在 C# 7.0 中添加了一些新功能,其中之一是本地函数。我查看了一些使用局部函数的示例和用例,发现使用它们的两个原因:

1) 隐藏函数或方法。原因是:如果该函数不是本地函数,它可能会被其他成员意外直接使用

2) 使用“父”函数的变量

在重构代码的调试过程中,我在 Visual Studio 中找不到对本地函数的引用。有对私有函数的引用:

私有函数

当我调试或重构代码时,它会有所帮助。在本地函数中我找不到它们:

局部函数

那么,第一个问题是为什么本地函数不显示摘要注释和引用?

一些程序员喜欢使用本地函数,但有些人不喜欢。这是一个示例(来自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
    }
4

1 回答 1

2

根据msdn

为代码元素插入 XML 注释

  1. 将文本光标放在要记录的元素上方,例如方法。

  2. 执行以下操作之一:

    • 在 C# 中键入 ///,或在 Visual Basic 中键入 '''

    • 从“编辑”菜单中,选择 IntelliSense > 插入注释

    • 从代码元素上或正上方的右键单击或上下文菜单中,选择 Snippet > Insert Comment

我测试了所有 3 种插入评论的方法,但都不适用于本地功能。

  1. 如果您尝试插入“///”,IDE 不会生成摘要节点。
  2. 如果您尝试通过编辑菜单或右键单击上下文菜单使用内部注释,您将在主要功能上添加摘要,而不是本地功能。

开发环境:VS2015

但是,文档中没有提到“不支持本地功能”的免责声明。

于 2020-03-06T06:31:25.037 回答