📅  最后修改于: 2023-12-03 15:08:34.716000             🧑  作者: Mango
在 C# 中,我们经常使用 foreach 循环来遍历一个集合的元素。但是,在某些情况下,我们可能需要在循环结束后返回要查看的列表。本文将介绍如何在 C# 中使用 foreach 之后返回要查看的列表。
在深入介绍如何在 C# 中返回要查看的列表之前,我们先来了解一下几个 C# 中的关键概念。
可枚举类型指的是实现了 IEnumerable 接口的类型。IEnumerable 接口定义了一个 GetEnumerator 方法,用于返回一个 IEnumerator 接口的实例。
public interface IEnumerable<out T> : IEnumerable
{
IEnumerator<T> GetEnumerator();
}
迭代器是用于实现 IEnumerable 接口的对象。它通过实现 IEnumerator 接口的 MoveNext 方法和 Current 属性来定义集合中的元素。同时,迭代器还可以使用 yield 来简化实现。在 C# 中,迭代器可以通过 yield return 和 yield break 来返回元素。
public class MyEnumerable : IEnumerable<int>
{
public IEnumerator<int> GetEnumerator()
{
return new MyEnumerator();
}
IEnumerator IEnumerable.GetEnumerator() // 这里需要实现非泛型的 GetEnumerator 方法
{
return GetEnumerator();
}
}
public class MyEnumerator : IEnumerator<int>
{
private int _currentIndex;
private int[] _data = new[] { 1, 2, 3, 4, 5 };
public int Current => _data[_currentIndex];
object IEnumerator.Current => Current;
public bool MoveNext()
{
return ++_currentIndex < _data.Length;
}
public void Reset()
{
_currentIndex = -1;
}
public void Dispose()
{
}
}
有了上述的基础知识,我们就可以开始介绍如何在 C# 中使用 foreach 之后返回要查看的列表了。
第一种方式是使用 List
public static List<T> GetList<T>(IEnumerable<T> source, Func<T, bool> predicate)
{
var result = new List<T>();
foreach (var item in source)
{
if (predicate(item))
{
result.Add(item);
}
}
return result;
}
其中,source 表示要遍历的集合,predicate 表示筛选的条件。在循环中,我们对于符合条件的元素,将其添加到 result 中。
第二种方式是使用 yield return 关键字来简化代码。我们可以通过一个迭代器方法来实现,将要查看的元素依次使用 yield return 返回即可。
public static IEnumerable<T> GetEnumerable<T>(IEnumerable<T> source, Func<T, bool> predicate)
{
foreach (var item in source)
{
if (predicate(item))
{
yield return item;
}
}
}
在上述代码中,我们使用 foreach 循环遍历 source,对于符合条件的元素,使用 yield return 返回到方法调用方。由于返回的类型是 IEnumerable
通过本文的介绍,我们了解了在 C# 中如何在 foreach 之后返回要查看的列表。我们介绍了两种实现方式:使用 List