我对我试图派生的类执行了转到定义 (F12),我注意到其中一个方法标有 AsyncStateMachineAttribute
。这又继承了 StateMachineAttribute
。我很好奇并决定在 MSDN 上阅读此属性及其所有派生词。这让我找到了 this我遇到了这个声明:
You can't use
IteratorStateMachineAttribute
to test whether a method is an iterator method in C#.
因为该声明是为了脱颖而出,所以它一定有严重的影响,但没有进一步解释为什么会这样。有没有人有这方面的见解?
最佳答案
我 99% 确定它是历史性的。基本上,C# 在 C# 2 中引入了迭代器 block - 很长时间才引入此属性。
等效的异步属性与 C# 中的异步方法同时引入,所以这很好......但即使 C# 编译器现在应用 IteratorStateMachineAttribute
到迭代器 block :
- 它不适用于使用旧版本编译器创建的库,因此您不能在那里依赖它。
- 它不适用于以 4.5 之前的 .NET 版本为目标的库。 (老实说,我不确定 VB 编译器在这里做了什么。它可能会省略该属性,或者可能需要您以最新版本的 .NET 为目标才能使用迭代器方法。)
我会说方法上存在 IteratorStateMachineAttribute
是一个很好的指标,表明它 是一个迭代器方法(尽管没有什么可以阻止恶作剧的开发人员应用它到其他方法),但由于 C# 编译器的旧版本,它不是一个充分的测试。
关于c# - 为什么我们不能在 C# 中使用 Iterator StateMachine Attribute?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37387248/