本地功能的摘要注释和参考不起作用
Summary comments and reference of local functions is not working
如您所知,在 C# 7.0 中添加了一些 new features 其中之一是本地函数。我查看了一些使用本地函数的示例和用例,发现了使用它们的两个原因:
1) 隐藏函数或方法。原因是:如果该函数不是本地的,其他成员不小心直接可以使用
2) 使用"Parent"函数的变量
在调试重构代码期间,我无法在 Visual Studio 中找到对本地函数的引用。有对私有函数的引用:
它在我调试或重构代码时很有帮助。在本地函数中我找不到它们:
那么,第一个问题是为什么局部函数不显示摘要注释和参考文献?
有些程序员喜欢使用本地函数,但有些则不喜欢。这是一个示例(来自 What's New in C# 7.0 | .NET Blog):
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
}
To insert XML comments for a code element
Place your text cursor above the element you want to document, for example, a method.
Do one of the following:
Type /// in C#, or ''' in Visual Basic
From the Edit menu, choose IntelliSense > Insert Comment
From the right-click or context menu on or just above the code element, choose Snippet > Insert Comment
我测试了所有 3 种插入评论的方法,但 none 对本地函数有效。
- 如果您尝试插入“///”,IDE 不会生成摘要节点。
- 如果您尝试通过编辑菜单或右键单击上下文菜单使用内部评论,您将在主函数而不是局部函数上添加摘要。
IDE: VS2015
但是文档中没有提到关于 "not supporting local function" 的免责声明。
如您所知,在 C# 7.0 中添加了一些 new features 其中之一是本地函数。我查看了一些使用本地函数的示例和用例,发现了使用它们的两个原因:
1) 隐藏函数或方法。原因是:如果该函数不是本地的,其他成员不小心直接可以使用
2) 使用"Parent"函数的变量
在调试重构代码期间,我无法在 Visual Studio 中找到对本地函数的引用。有对私有函数的引用:
它在我调试或重构代码时很有帮助。在本地函数中我找不到它们:
那么,第一个问题是为什么局部函数不显示摘要注释和参考文献?
有些程序员喜欢使用本地函数,但有些则不喜欢。这是一个示例(来自 What's New in C# 7.0 | .NET Blog):
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
}
To insert XML comments for a code element
Place your text cursor above the element you want to document, for example, a method.
Do one of the following:
Type /// in C#, or ''' in Visual Basic
From the Edit menu, choose IntelliSense > Insert Comment
From the right-click or context menu on or just above the code element, choose Snippet > Insert Comment
我测试了所有 3 种插入评论的方法,但 none 对本地函数有效。
- 如果您尝试插入“///”,IDE 不会生成摘要节点。
- 如果您尝试通过编辑菜单或右键单击上下文菜单使用内部评论,您将在主函数而不是局部函数上添加摘要。
IDE: VS2015
但是文档中没有提到关于 "not supporting local function" 的免责声明。