gpt4 book ai didi

c# - 方法的可枚举和延迟执行

转载 作者:行者123 更新时间:2023-11-30 19:57:41 25 4
gpt4 key购买 nike

我有一个方法:int[] GetNumbers (); 它会立即返回数字数组。但是我只能在类初始化时调用这个方法。我无法手动初始化这个类,它是由其他人在其他地方初始化的。
我想创建 IEnumerable,它将在我开始迭代该可枚举对象时调用 GetNumbers()

例子:

    IEnumerable<int> numbers = new SomeKindOfWrapper (() => GetNumbers());

现在 GetNumbers() 只会在我尝试访问 numbers 时被调用。

如何实现? NET 框架中是否有支持它的东西?

我可以将委托(delegate)传递给将调用 GetNumbers() 的类,但我更喜欢 IEnumerable。

最佳答案

只需创建一个调用委托(delegate)的迭代器 block ,然后产生序列中的值:

public static IEnumerable<T> SomeKindOfWrapper<T>(
Func<IEnumerable<T>> generator)
{
foreach(var item in generator())
yield return item;
}

如果你想确保委托(delegate)永远不会被调用超过一次,你可以使用 Lazy 代替:

public static IEnumerable<T> SomeKindOfWrapper<T>(
Lazy<IEnumerable<T>> sequence)
{
foreach(var item in sequence.Value)
yield return item;
}

关于c# - 方法的可枚举和延迟执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29127111/

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