0

经过长时间的搜索,我有我的第一个问题。我有这段代码:

var strings = new MyStringList { "orange", "APPLE", "grape", "pear" };
foreach (var item in strings.Where(s => s.Length == 5))
{
  txtLog.WriteLine(item);
}

还有一个公开课:

public class MyStringList : List<string>
{
  public IEnumerable<string> Where(Predicate<string> filter)
  {
    return this.Select(s => filter(s) ? s.ToUpper() : s);
  }
}

有没有办法在 If Else 构造中重写 return 语句?

我遇到了这样的事情,只有 if 给出了错误:

if (this.Select(s=> filter(s)))
{
  return this.Select(s => s.ToUpper());
}
else
{
  return this.Select(s => s);
}
4

1 回答 1

4

由于您的filter作品只针对单个项目,因此您必须先遍历您的收藏。在迭代期间,不再需要Select()使用yield return来动态返回迭代器。

public IEnumerable<string> Where(Predicate<string> filter)
{
    foreach (var s in this)
    {
        if (filter(s))
            yield return s.ToUpper();
        else
            yield return s;
    }
}
于 2013-05-29T10:22:56.553 回答