Khi xem câu hỏi này, Jon đã làm tốt việc trả lời ... 'How to read a text file reversly with iterator'. Và có một câu hỏi tương tự, trong đó tôi đã trả lời bằng cách sử dụng con trỏ lấy nét tập trung .. '.net is there a way to read a text file from bottom to top' trước khi nó bị đóng ...Tại sao bạn không thể sử dụng từ khóa không an toàn trong ngữ cảnh trình lặp?
Bây giờ tôi đã cố gắng giải quyết vấn đề này bằng cách sử dụng con trỏ, ok xung quanh các cạnh ...
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(); } }
nhưng phát hiện ra rằng biên dịch C# không thể xử lý này sử dụng thực hiện điều này, nhưng đã bị tàn phá khi biên dịch C# từ chối với một CS1629 lỗi - 'mã không an toàn có thể không xuất hiện trong vòng lặp'
Tại sao vậy?
Hãy suy nghĩ về cách 'lợi nhuận hoạt động' hoạt động dưới sự giám sát. –