C# 7 局部函数:是不是允许属性/方面?
Posted
技术标签:
【中文标题】C# 7 局部函数:是不是允许属性/方面?【英文标题】:C# 7 Local Functions: are attributes / aspects allowed?C# 7 局部函数:是否允许属性/方面? 【发布时间】:2017-04-19 14:36:51 【问题描述】:C# 7 引入了本地函数(这很棒!)。假设我有以下代码:
using System;
using PostSharp.Aspects;
namespace AspectCS7
class Program
private static void Main()
[MyAspect]
void LocalFunction()
Console.WriteLine("Hello Aspect!");
LocalFunction();
[Serializable]
public class MyAspect : OnMethodBoundaryAspect
public override void OnEntry(MethodExecutionArgs args)
Console.WriteLine("Entering Aspect");
此代码显示编译时错误。是否可以将属性应用到本地函数?
【问题讨论】:
从这个Roslyn issue看来,属性(也许函数上不允许)没有实现。 不,不可能。如果是这样,您的代码将编译。 @InBetween 这不是一个真正的答案,他们可能(出于某种疯狂的原因)更改了本地函数中属性的语法。 @DavidG 不在任何地方记录它?我觉得很难相信。如果 Microsoft 发布的 whats new in C#7 文档中没有明确提及并且正常语法不起作用,我倾向于相信显而易见的:本地函数上不允许使用属性。这是一个有趣的功能,DebuggerStepThrough
在一些辅助函数中可能会被严重遗漏。
@InBetween 我也觉得难以置信,但并非不可能。没有正式的 C#7 规范,其实还没有正式的 C#6 规范!
【参考方案1】:
在某一点上允许本地函数上的属性。有一些 examples on the web 的局部函数使用属性,但是它们不再被允许。
更新: 以下是关于此主题的持续讨论:https://github.com/dotnet/csharplang/issues/794。
【讨论】:
@PetSerAl,底部有一个使用 [CallerMemberName] 的示例。你可以在这里看到一个类似的例子:nimaara.com/2017/04/01/local-functions-a-new-c以上是关于C# 7 局部函数:是不是允许属性/方面?的主要内容,如果未能解决你的问题,请参考以下文章
用Python写一个计算器,不允许使用计算器方面的内置函数,只能使用+-,使用到正则表达式。