gpt4 book ai didi

c# - 将 Select<> 传递给方法

转载 作者:太空狗 更新时间:2023-10-30 00:35:33 25 4
gpt4 key购买 nike

我有密码

Enumerable.Range(100, 100)
.Select(x => x / 10)

有没有一种方法可以将 .Select(x => x/10) 行传递给方法。目的是在选择发生时将结果传递给方法。我想在这里避免使用 foreach。

最佳答案

您可以编写自己的扩展方法,在每个项目通过时对其执行操作:

public static IEnumerable<T> WithAction<T>(this IEnumerable<T> source,
Action<T> action)
{
foreach (T item in source)
{
action(item);
yield return item;
}
}

然后根据你是想对原始值还是预测值采取行动,你会写:

Enumerable.Range(100, 100)
.Select(x => x / 10)
.WithAction(x => Console.WriteLine(x))

Enumerable.Range(100, 100)
.WithAction(x => Console.WriteLine(x))
.Select(x => x / 10)

这使其独立于 Select 本身。如果您需要它来使用投影,您可以编写如下内容:

public static IEnumerable<TResult> SelectAndAct<TSource, TResult>
(this IEnumerable<TSource> source,
Func<TSource, TResult> projection,
Action<TSource, TResult> action)
{
foreach (TSource item in source)
{
TResult result = projection(item);
action(item, result);
yield return result;
}
}

然后:

Enumerable.Range(100, 100)
.SelectAndAct(x => x / 10,
(x, y) => Console.WriteLine("Was: {0}; Now: {1}", x, y))

请注意,所有这些都违反了 LINQ 无副作用的正常意图。 通常在查询中产生副作用不是一个好主意……但当然每个规则都有异常(exception):)

关于c# - 将 Select<> 传递给方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4334288/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com