Add Iterator pattern

This commit is contained in:
Petrutiu Mihai
2016-06-22 19:37:05 +03:00
parent 1ab706016e
commit 35c3c5722d
19 changed files with 409 additions and 2 deletions

View File

@@ -0,0 +1,36 @@
using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Threading.Tasks;
namespace IteratorPattern.FileExample
{
public class LineReader : IEnumerable<string>
{
public string FilePath { get; private set; }
public LineReader(string filePath)
{
FilePath = filePath;
}
IEnumerator IEnumerable.GetEnumerator()
{
return GetEnumerator();
}
public IEnumerator<string> GetEnumerator()
{
using (TextReader reader = File.OpenText(FilePath))
{
string line;
while ((line = reader.ReadLine()) != null)
{
yield return line;
}
}
}
}
}

View File

@@ -0,0 +1,30 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Threading.Tasks;
namespace IteratorPattern.FileExample
{
public class ReadBigFilesExample
{
public void Run()
{
string[] files = Directory.GetFiles("bin/Debug/IteratorPattern/FileExample/SampleFiles");
var filesWithContent = from file in files
where HasAnyLines(file)
select file;
foreach (var fileWithContent in filesWithContent)
{
Console.WriteLine("File with content: {0}", fileWithContent);
}
}
private bool HasAnyLines(string file)
{
return new LineReader(file).Any();
}
}
}