rksoftware

Visual Studio とか C# とかが好きです

C# 2.0 以降の新機能の確認 - C# 9.0 - foreach ループの拡張機能 GetEnumerator サポート

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();
}