gpt4 book ai didi

c# - 如何正确检查 IEnumerable 的现有结果

转载 作者:太空狗 更新时间:2023-10-29 22:11:05 24 4
gpt4 key购买 nike

检查集合是否包含项目的最佳做法是什么?

这是我所拥有的示例:

var terminalsToSync = TerminalAction.GetAllTerminals();

if(terminalsToSync.Any())
SyncTerminals(terminalsToSync);
else
GatewayLogAction.WriteLogInfo(Messages.NoTerminalsForSync);

GetAllTerminals() 方法将执行存储过程,如果我们返回结果,(Any()true), SyncTerminals() 将遍历元素;从而再次枚举,第二次执行存储过程。

避免这种情况的最佳方法是什么?

我想要一个也可以在其他情况下使用的好解决方案;可能没有将其转换为 List

提前致谢。

最佳答案

我可能会使用 ToArray 调用,然后检查 Length;反正你要枚举所有的结果,为什么不早点做呢?但是,既然您说过要避免过早实现可枚举...

我猜 SyncTerminals 有一个 foreach,在这种情况下你可以这样写:

bool any = false;
foreach(var terminal in terminalsToSync)
{
if(!any)any = true;
//....
}

if(!any)
GatewayLogAction.WriteLogInfo(Messages.NoTerminalsForSync);

好吧,在第一个循环之后有一个冗余的 if,但我猜额外几个 CPU 周期的成本不会有太大影响。

同样,您可以使用旧方法进行迭代并使用 do...while 循环和 GetEnumerator;将第一次迭代从循环中取出;这样实际上就没有浪费的操作:

var enumerator = terminalsToSync.GetEnumerator();
if(enumerator.MoveNext())
{
do
{
//sync enumerator.Current
} while(enumerator.MoveNext())
}
else
GatewayLogAction.WriteLogInfo(Messages.NoTerminalsForSync);

关于c# - 如何正确检查 IEnumerable 的现有结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9258293/

24 4 0