如何返回IEnumerable



我仍在学习C#的基础知识,并发现了一个任务,您必须实现下面的方法,它应该返回相同的字符串序列,但大写,我认为序列意味着数组。

但我也应该以某种方式使用IEnumerable。

我认为IEnumerable是一个接口,在我应该添加逻辑的方法中,它是一个类型和参数吗?

我搜索发现返回类型IEnumerable意味着它必须返回一些可以实现IEnumeraable的东西,但参数仍然让我困惑,我如何使用它们来返回大写字母?我要使用foreach吗?

using System;
using System.Collections.Generic;
namespace EnumerableTask
{
public class EnumerableManipulation
{
/// <summary> Transforms all strings to upper case.</summary>
/// <param name="data">Source string sequence.</param>
public IEnumerable<string> GetUppercaseStrings(IEnumerable<string> data)
{
}
}

您可以使用Linq Select((,它将返回一个IEnumerable。即:

public IEnumerable<string> GetUppercaseStrings(IEnumerable<string> data)
{
return data.Select(d => d.ToUpper());
}

编辑:你可以查看Linq文档或我的博客,从最古老的帖子(2009年2月(开始:

FoxSharp

您也可以使用foreachyield:

public IEnumerable<string> GetUppercaseStrings(IEnumerable<string> data)
{
foreach (var item in data) 
yield return item?.ToUpper();
}

IEnumerable<T>是一个通用接口。它表示类型为T的对象的集合。在您的案例中,data是可以枚举的string的集合。

枚举IEnumerable

要枚举"数据"并逐个访问元素,有几种可能性。这里有两个例子。

GetEnumerator((

GetEnumerator()为您提供了一种通过IEnumerable<T>进行枚举的方法。enumerator.Current允许您访问当前元素,enumerator.MoveNext()允许您移动到集合中的下一个元素
首先使用调用MoveNext()方法将枚举器放置在IEnumerable<T>的第一个元素处。当仍有元素要枚举时,MoveNext()将返回true。当到达终点时,MoveNext()返回false
以下是它的典型使用示例。

IEnumerator<string> enumerator = data.GetEnumerator();
while(enumerator.MoveNext())
{
string text = data.Current;
/* Do something */
}
enumerator.Dispose();

前臂

使用foreach可以处理枚举器过程的所有复杂性。事实上,建议使用foreach,而不是直接操作枚举器(请参阅备注中的Microsoft文档(。

foreach(string text in data)
{
/* Do something */
}

返回IEnumerable

因为IEnumerable<T>是一个接口,所以不能"构造";就像使用classstruct一样。因此,要返回IEnumerable<T>,您必须安装一个实际的class或实现该接口的struct。例如:

public IEnumerable<string> Foo()
{
List<string> list =  new List<string>();
/* Do something on the list*/
return list;
}

public IEnumerable<string> Foo(int count)
{
string[] array =  new string[count];
/* Do something on the array*/
return array;
}

可以这样做是因为List<T>Array实现了接口IEnumerable<string>

最新更新