如何实现为每个输入值生成两个结果的扩展方法
本文关键字:方法 两个 结果 扩展 输入 何实现 实现 | 更新日期: 2023-09-27 18:33:22
我目前正在构建一个处理IEnumerable<TSource>
的扩展方法。对于源集合中的每个项目,我需要生成一个或两个结果类型的项目。
这是我的第一种方法,它失败了,因为该方法被保留在第一个 return 语句上,并且在命中第二个 return 语句时忘记了它的状态。
public static IEnumerable<TResult> DoSomething<TSource>(this IEnumerable<TSource> source)
where TResult : new()
{
foreach(item in source)
{
if (item.SomeSpecialCondition)
{
yield return new TResult();
}
yield return new TResult();
}
}
如何正确实现此方案?
您的解决方案应该可以工作。下面是一个完整的示例程序,它演示了该方法的工作原理:
using System;
using System.Collections.Generic;
using System.Linq;
namespace Demo
{
class Program
{
void run()
{
var test = DuplicateOddNumbers(Enumerable.Range(1, 10));
foreach (var n in test)
Console.WriteLine(n);
}
public IEnumerable<int> DuplicateOddNumbers(IEnumerable<int> sequence)
{
foreach (int n in sequence)
{
if ((n & 1) == 1)
yield return n;
yield return n;
}
}
static void Main(string[] args)
{
new Program().run();
}
}
}
另外,请注意Dmitry Dovgopoly关于使用正确的TSource和TResult的评论。