C# 9使用foreach扩展的示例详解

C# 9使用foreach扩展的示例详解

在C# 9中,foreach语句得到了一些扩展,使得使用foreach循环更加简洁和灵活。本文将详细解析C# 9中foreach扩展的示例,并介绍如何正确使用这些扩展来提高代码的可读性和易用性。

1. 新增的pattern matching功能

C# 9引入了pattern matching的功能,使得foreach语句可以更加灵活地迭代不同类型的集合。通过使用pattern matching,我们可以在foreach循环中对集合中的元素进行类型判断,从而实现不同的逻辑处理。

下面是一个示例代码,用于演示如何使用pattern matching的foreach扩展:

List<object> items = new List<object>()

{

"Hello",

42,

new DateTime(2022, 1, 1),

3.14

};

foreach (var item in items)

{

if (item is string str)

{

Console.WriteLine($"String: {str}");

}

else if (item is int num)

{

Console.WriteLine($"Int: {num}");

}

else if (item is DateTime date)

{

Console.WriteLine($"DateTime: {date}");

}

else if (item is double d)

{

Console.WriteLine($"Double: {d}");

}

}

在上面的示例中,我们创建了一个包含不同类型元素的List对象。通过foreach循环和pattern matching功能,我们可以根据元素的类型进行不同的处理。这样,我们就可以在同一个循环中处理不同类型的元素,避免了使用多个循环的麻烦。

2. 新增的IEnumerable支持

除了对对象集合的支持,C# 9还引入了对IEnumerable集合的支持,使得我们可以直接在foreach循环中迭代IEnumerable接口的实现类。

下面是一个示例代码,用于演示如何在foreach循环中迭代IEnumerable集合:

IEnumerable<int> numbers = GetNumbers();

foreach (var number in numbers)

{

Console.WriteLine(number);

}

private static IEnumerable<int> GetNumbers()

{

yield return 1;

yield return 2;

yield return 3;

}

在上面的示例中,我们定义了一个返回IEnumerable<int>的方法GetNumbers(),并在方法中使用yield return关键字逐个返回数字。通过对GetNumbers()方法返回的IEnumerable<int>进行迭代,我们可以直接在foreach循环中输出数字。这样,我们可以更加方便地处理逐个生成的数据。

3. 新增的索引和元素支持

C# 9还新增了对集合索引和元素的支持,使得我们可以在foreach循环中同时访问集合的索引和元素。

下面是一个示例代码,用于演示如何在foreach循环中同时访问集合的索引和元素:

List<string> fruits = new List<string>()

{

"Apple",

"Banana",

"Cherry"

};

foreach ((int index, string fruit) in fruits.WithIndex())

{

Console.WriteLine($"Index: {index}, Fruit: {fruit}");

}

public static class IEnumerableExtensions

{

public static IEnumerable<(int index, T item)> WithIndex<T>(this IEnumerable<T> items)

{

return items?.Select((item, index) => (index, item)) ?? Enumerable.Empty<(int index, T item)>();

}

}

在上面的示例中,我们定义了一个扩展方法WithIndex(),用于给IEnumerable<T>集合添加索引的支持。通过在foreach循环中使用元组来接收索引和元素,我们可以同时访问集合的索引和元素,便于我们处理索引相关的逻辑。

总结

C# 9中的foreach扩展使得我们在使用foreach循环时更加灵活和便捷。通过使用pattern matching、IEnumerable支持和索引和元素支持,我们可以在同一个循环中处理不同类型的元素、处理逐个生成的数据和同时访问集合的索引和元素。这些扩展大大提升了代码的可读性和易用性,使得我们可以更加高效地编写和维护代码。

以上就是C# 9使用foreach扩展的示例的详解,希望本文对您有所帮助。

后端开发标签