提问者:小点点

不能在引用结构中使用Yield关键字?


我想在ref结构方法中使用yield:

public ref struct RefStruct 
{
    public IEnumerator<int> GetEnumerator()
    {
        yield return 1;
    }
}

编译器抱怨错误:

CS4013不能在嵌套函数,查询表达式,迭代器块或异步方法内使用类型为“Refstruct”的实例

但在迭代器块中不使用refstruct实例。

我可以假设对于ref结构,yield转换规则没有改变。 与类一样,具有yield的方法被转换为GetEnumerator类,该类具有存储ref结构实例的字段。 这是不正确的,因为类字段不能是ref struct。 但在这种情况下,编译器必须抱怨另一个错误。

这是一个bug还是我做错了什么?


共1个答案

匿名用户

我不知道是怎么回事,但是在玩了一圈之后我发现下面的工作在周围,也许它是有用的

public ref struct RefStruct 
{
    public IEnumerator<int> GetEnumerator()
    {
        return Foo();

        IEnumerator<int> Foo()
        {
            yield return 1;
        }
    }
}