例如在 C# 中:
public IEnumerator MyFunc() {
yield return null
}
这是我在 F# 中尝试过的:
seq {
yield null
} :?> IEnumerator
编译后,然后使用ILSpy查看编译结果,找不到
yield
关键字。Async
的原因是因为 Unity 兼容性。
是的,您可以在 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;
}