c#是否可以在调用函数后延迟加载函数参数?
作者:互联网
我想知道在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 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;
}
这是完全懒惰的.该函数的主体仅在您开始枚举时才执行,因为这是一个迭代器方法.只有这样,懒惰的计数才会被强制实现.
除了懒惰,您可以传递Func< int>以及getTakeCount参数.
标签:lazy-evaluation,lazy-loading,lazy-initialization,c,net 来源: https://codeday.me/bug/20191027/1944070.html