F# 中的 IEnumerator 是否可以“yield return null”?

问题描述 投票:0回答:1

例如在 C# 中:

public IEnumerator MyFunc() {
  yield return null
}

这是我在 F# 中尝试过的:

seq {
  yield null
} :?> IEnumerator

编译后,然后使用ILSpy查看编译结果,找不到

yield
关键字。
这在 F# 中不可能做到吗?我使用它而不是
Async
的原因是因为 Unity 兼容性。

unity-game-engine f# c#-to-f#
1个回答
0
投票

是的,您可以在 F# 中产生 null。编译器将“构建一个状态机”,就像 C# 编译器一样。示例: seq { yield "a" yield null yield "b" } |> printfn "%A"

输出:

seq ["a"; null; "b"]

反编译为C#:

public override int GenerateNext(ref IEnumerable<object> next) { switch (pc) { default: pc = 1; current = "a"; return 1; case 1: pc = 2; current = null; return 1; case 2: pc = 3; current = "b"; return 1; case 3: pc = 4; break; case 4: break; } current = null; return 0; }

© www.soinside.com 2019 - 2024. All rights reserved.