gpt4 book ai didi

c#是否可以在调用函数后延迟加载函数参数?

转载 作者:行者123 更新时间:2023-11-30 15:22:49 25 4
gpt4 key购买 nike

我想知道在 C# 中是否可以在调用函数后延迟加载函数的参数。事实上,我只想在使用函数的输出时加载函数的参数。我试着用下面的例子来解释我的意思:

        var a = Enumerable.Range(1, 10);
int take = 5;
var lazyTake = new Lazy<int>(() => take);

// here I still don't iterate on Enumerable, I want the parameter of function Take be initialized later when I start iterating
var b = a.Take(lazyTake.Value);

// here I initialize (change) the value of parameter take
take = 6;

Console.WriteLine(b.ToList().Count); // I want b to have 6 elements but it's 5

在这里Lazy<int>没有做我需要的。有谁知道支持这种情况的任何解决方法或语言功能?

最佳答案

public static IEnumerable<T> Take<T>(this IEnumerable<T> source, Lazy<int> count) { 
var takeSequence = source.Take(count.Value);
foreach (var item in takeSequence) yield return item;
}

这完全是懒惰的。这个函数的主体只会在你开始枚举时执行,因为这是一个迭代器方法。才会偷懒count被迫实现。

而不是 Lazy你可以通过 Func<int> getTakeCount参数也是如此。

关于c#是否可以在调用函数后延迟加载函数参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35209540/

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