C# 2.0 以降の新機能を一つづつ確認していきます。
以前に一度行ったのですが、公式ドキュメント再編でリンク切れしているところを見つけてしまったので。今ならもっと簡潔なサンプルが欠けるところもあるだろうし、せっかくなので今もう一度確認して行きます。
foreach ループの拡張機能 GetEnumerator サポート
https://docs.microsoft.com/ja-jp/dotnet/csharp/language-reference/keywords/foreach-in
拡張メソッドで GetEnumerator メソッドを作ればどんな型のオブジェクトでも foreach できる。
var data = new Data { MyProperty1 = "Saitama", MyProperty2 = "Chiba", MyProperty3 = "Ibaraki" }; // 拡張メソッド GetEnumerator で foreach foreach (string datum in data) Console.WriteLine(datum); // GetEnumerator を持たない型 class Data { public string MyProperty1 { get; set; } public string MyProperty2 { get; set; } public string MyProperty3 { get; set; } } // 拡張メソッド GetEnumerator static class DataExtensions { internal static System.Collections.IEnumerator GetEnumerator(this Data data) => new string[] { data?.MyProperty1, data?.MyProperty2, data?.MyProperty3 }.GetEnumerator(); }