C# yield return で多層フィルタリング

テキストファイルから読み込むのを例に、foreachで簡単に多層フィルタリングができるものの例です。



class values
{
public string string_1;
public values(string in_string_1)
{
string_1 = in_string_1;
}
}
static private void test_proc()
{
var IE_rfl = yr_ReadFileLine(@"C:\bin\NowPasori.txt");
var IE_rlf_filter1 = yr_ReadFileLine_Filter_有効行のみ(IE_rfl);

foreach(values tmp_line in IE_rlf_filter1)
{
string debug1 = tmp_line.string_1;
}

}
static private IEnumerable<values> yr_ReadFileLine(string in_filepath)
{
if (File.Exists(in_filepath) == false)
yield break;

using (var sr = new StreamReader(in_filepath, Encoding.GetEncoding("Shift_JIS")))
{
while (sr.Peek() > -1)
{
yield return new values(sr.ReadLine());
}
}
}
static private IEnumerable<values> yr_ReadFileLine_Filter_有効行のみ(IEnumerable<values> in_IE_line)
{
foreach (values tmp_line in in_IE_line)
{
if (string.IsNullOrWhiteSpace(tmp_line.string_1) == true ||
tmp_line.string_1.TrimStart().StartsWith(";") == true)
continue;
if (tmp_line.string_1.Contains(";") == true)
tmp_line.string_1 = tmp_line.string_1.Substring(0, tmp_line.string_1.IndexOf(';'));
tmp_line.string_1 = tmp_line.string_1.Trim();
yield return tmp_line;
}
}