gpt4 book ai didi

c# - 任何 yield 类型的通用类型

转载 作者:行者123 更新时间:2023-12-05 02:01:22 25 4
gpt4 key购买 nike

尝试让系统能够存储任何类型的 yield 指令

YieldInstruction m_yield;

void SetInstruction()
{
switch(condition)
{
case UseWait:
m_yield = new WaitForSeconds(1f);
break;
case UseWaitUntil:
m_yield = new WaitUntil(() => flag == true); // Cannot cast here
}
}

将类型更改为 IEnumerator 会将问题放在第一个上。CustomeYieldInstruction 两者都不做。

我无法确定 YieldInstruction 和 CustomYieldInstruction 之间的关系。尽管名称不同,但一个是它自己的基类型,而后者是 IEnumerator。

我也很困惑,因为这两种方法可以在 IEnumerator 方法中产生,但如果像我尝试的那样完成,则不会转换成它。

public sealed class WaitForSeconds : YieldInstruction{ /* ** */ }
public class YieldInstruction { }

public sealed class WaitUntil : CustomYieldInstruction { /* ** */}
public abstract class CustomYieldInstruction : IEnumerator { /* ** */ }

我能做到:

public IEnumerator Sequence()
{
yield return new WaitForSeconds(1f),
yield return new WaitUntil(()=> condition == true);
}

最佳答案

除了Menyus' answer

我会说使用 object 对我来说有点太脏了。

但是您可以简单地为那些本身没有实现它的类型构建一个包装器 IEnumerator(就像任何基于内部时间的东西):

private IEnumerator WaitForYieldInstruction(YieldInstruction instruction)
{
yield return instruction;
}

然后使用

IEnumerator m_yield;

void SetInstruction()
{
switch(condition)
{
case UseWait:
m_yield = WaitForYieldInstruction(new WaitForSeconds(1f));
break;
case UseWaitUntil:
m_yield = new WaitUntil(() => flag);
break;
}
}

关于c# - 任何 yield 类型的通用类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66634668/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com