誰も私の予想通りに次のコードが動作しない理由を教えていただけますか?私はStreamReaderの周りにIEnumberableラッパーを記述しようとしていますが、ElementAtを使用すると、ElementAtに渡すインデックスに関係なくストリームから連続した文字が読み込まれます。C#3.0 ElementAtはイテレーター関数で壊れていますか?
ファイル "test.txt"には "abcdefghijklmnopqrstuvwxyz"が含まれています。代わりに、私は
とArgumentOutOfRange ABCDEFGHIJKLMNOPQRSTUVWXYZ
を取得...
aaaaaaaaaaaaaaaaaaaaaaaaaaa
bbbbbbbbbbbbbbbbbbbbbbbbbbb
を:私は出力があることを期待します例外は、私がこれまでにElementAtに渡された唯一のインデックスは0
MSDNが言うされていても、呼び出されます:(> <(T>の))
ソースの種類がIListの<を実装している場合その実装は、指定されたインデックスの要素を取得するために使用されます。それ以外の場合、このメソッドは指定された要素を取得します。
「次の要素を取得する」と読みますか?もしそうなら、ちょっと怠惰リストの目的に反していること...
static IEnumerable<char> StreamOfChars(StreamReader sr) { while (!sr.EndOfStream) yield return (char)sr.Read(); } static void Main(string[] args) { using (StreamReader sr = new StreamReader("test.txt")) { IEnumerable<char> iec = StreamOfChars(sr); for (int i = 0; i < 26; ++i) { for (int j = 0; j < 27; ++j) { char ch = iec.ElementAt(i); Console.Write(ch); } Console.WriteLine(); } } }