gpt4 book ai didi

C#:迭代器与返回 IEnumerable 的函数

转载 作者:行者123 更新时间:2023-12-04 02:30:43 27 4
gpt4 key购买 nike

假设有两种方法:

IEnumerable<int> DoSomething1();
IEnumerable<int> DoSomething2();

修改我的对象的状态。我不知道函数是否使用了yield内部或只返回一个 List<int> .

然后我想获取输出并传递给另外两个函数:

void SendToUser(IEnumerable<int> values);
void PrintOut(IEnumerable<int> values);

然后仅基于函数接口(interface)(DoSomethingX)我不能说这是否是一个有效的操作:

var values = DoSomethingX();
SendToUser(values);
PrintOut(values)

因为在迭代器的情况下,它将导致调用 DoSomethingX两次。

这是某种不一致还是我正在使用迭代器/IEnumerable以错误的方式?问题出在哪里?

最佳答案

如果方法返回 IEnumerable,那么您应该仅依赖于它是可迭代的事实,仅此而已,因为该方法的实现可能会发生变化。

如果您可以控制该方法并且知道消费者需要更具体的类型,则返回更具体的类型。

如果您无法控制并且需要实现列表行为,您总是可以将 IEnumerable 转换为列表:

var values = DoSomethingX().ToList();
SendToUser(values);
PrintOut(values);

关于C#:迭代器与返回 IEnumerable 的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64371255/

27 4 0