...ないの? のコメント:
? SilverBouquetにお渡しした私のクラスの中で、最初はyieldを使ってたのがあったんですけど、
? Visual Basicに書き直す時にわからなかった(さらに長くなりそうだったw)ので...
あー。SilverBouquetはキホンVisual Basic .Net なのね。
んじゃまyield使ってない版。こいつならVBにportできまっしゃろ。
using System.IO;
using System.Collections.Generic;
using System.Collections;
namespace SilverBouquet.IO {
? public class LineEnumerator : IEnumerator {
??? private TextReader reader_;
??? private string line_;
??? public LineEnumerator(TextReader reader) { reader_ = reader; }
??? public string Current { get { return line_; } }
??? object IEnumerator.Current
????? { get { return line_; }}
??? public bool MoveNext()
????? { line_ = reader_.ReadLine(); return line_ != null; }
??? public void Reset() { throw new System.InvalidOperationException("SilverBouquet.IO.LineEnumerator.Reset() can not be called"); }
??? public void Dispose() {}
? }
? internal class LineEnumerable : IEnumerable {
??? private TextReader reader_;
??? public LineEnumerable(TextReader reader) { reader_ = reader; }
??? public IEnumerator GetEnumerator()
????? { return new LineEnumerator(reader_); }
??? IEnumerator IEnumerable.GetEnumerator()
????? { return new LineEnumerator(reader_); }
? }
? public static class Util {
??? public static IEnumerable ReadLines(TextReader reader) {
????? return new LineEnumerable(reader);
??? }
? }
}
// おためし
public class Program {
? public static void Main() {
??? TextReader reader = new StreamReader("ふぁいる");
??? foreach ( string line in SilverBouquet.IO.Util.ReadLines(reader) ) {
????? System.Console.WriteLine(line);
??? }
??? reader.Close();
? }
}