【问题标题】:If else alternative for a conditional operator filter in a predicate?是否可以替代谓词中的条件运算符过滤器?
【发布时间】:2013-05-24 13:27:33
【问题描述】:

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

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

【问题讨论】:

    标签: c# lambda ternary-operator


    【解决方案1】:

    由于您的 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;
        }
    }
    

    【讨论】:

    • 我很震惊,但没人写像+1 for yield这样的评论
    • 感谢您的快速回答!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-14
    • 1970-01-01
    • 2017-02-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-13
    相关资源
    最近更新 更多