gpt4 book ai didi

c# - 为什么不能在迭代器上下文中使用 unsafe 关键字?

转载 作者:太空狗 更新时间:2023-10-29 21:03:26 26 4
gpt4 key购买 nike

在查看这个问题时,乔恩很好地回答了...' How to read a text file reversly with iterator '.还有一个类似的问题,我用指针 hocus pocus 回答了这个问题..' .net is there a way to read a text file from bottom to top ' 在它关闭之前....

现在我开始尝试使用指针来解决这个问题,好吧,它的边缘看起来很粗糙……

public class ReadChar : IEnumerable<char>{    private Stream _strm = null;    private string _str = string.Empty;    public ReadChar(string s)    {        this._str = s;    }    public ReadChar(Stream strm)    {        this._strm = strm;    }    public IEnumerator<char> GetEnumerator()    {        if (this._strm != null && this._strm.CanRead && this._strm.CanSeek)        {            return ReverseReadStream();        }        if (this._str.Length > 0)        {            return ReverseRead();        }        return null;    }    private IEnumerator<char> ReverseReadStream()    {        long lIndex = this._strm.Length;        while (lIndex != 0 && this._strm.Position != 0)        {            this._strm.Seek(lIndex--, SeekOrigin.End);            int nByte = this._strm.ReadByte();            yield return (char)nByte;         }    }    private IEnumerator<char> ReverseRead()    {        unsafe        {            fixed (char* beg = this._str)            {                char* p = beg + this._str.Length;                while (p-- != beg)                {                    yield return *p;                }            }        }    }    IEnumerator IEnumerable.GetEnumerator()    {        return GetEnumerator();    }}

但发现 C# 编译器无法使用此实现处理此问题,但当 C# 编译器以错误 CS1629 拒绝时,我感到很震惊 - “不安全的代码可能不会出现在迭代器中”

为什么会这样?

最佳答案

埃里克·利珀特 (Eric Lippert) 在此处发表了一篇关于此主题的优秀博客文章:Iterator Blocks, Part Six: Why no unsafe code?

关于c# - 为什么不能在迭代器上下文中使用 unsafe 关键字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2241417/

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