【问题标题】: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 规范!

标签: c# .net attributes postsharp aspect


【解决方案1】:

在某一点上允许本地函数上的属性。有一些 examples on the web 的局部函数使用属性,但是它们不再被允许。

更新: 以下是关于此主题的持续讨论:https://github.com/dotnet/csharplang/issues/794

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2013-01-15
  • 1970-01-01
  • 2011-11-01
  • 2010-10-01
  • 2018-09-15
  • 2017-03-13
  • 2018-10-15
  • 2011-09-19
相关资源
最近更新 更多