【发布时间】:2016-09-20 02:42:53
【问题描述】:
我在尝试派生的类上执行了转到定义 (F12),我注意到其中一个方法标有 AsyncStateMachineAttribute。这又继承了StateMachineAttribute。我很好奇并决定在 MSDN 上阅读此属性及其所有派生词。这让我找到了this,我看到了这个声明:
您不能使用
IteratorStateMachineAttribute来测试一个方法是否是 C# 中的迭代器方法。
因为该声明是为了突出,所以它肯定有严重的影响,但没有进一步解释为什么会这样。有没有人有这方面的见解?
【问题讨论】:
-
我认为这只是想说您不能依靠属性在反射上下文中测试此类方法(例如通过静态分析器)。跨度>
-
它高度特定于 VB.NET。将元数据转换回 VB.NET 声明的工具(如 Go To Definition)使用它来知道需要使用 Iterator 关键字显示函数。如果没有这些帮助,Iterator Function() As T 将显示为 Function() As IEnumerable(Of T)。 C# 编译器现在也发出它,在 VB.NET 在 VS2012 中获得迭代器支持之前它没有这样做。所以你不能依赖它。
标签: c# iterator state-machine compiler-services