【发布时间】: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 规范!
标签: c# .net attributes postsharp aspect