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 に答える