我可以循环一个方法吗?

时间:2017-07-05 09:04:06

标签: c# for-loop

我正在使用一种方法来检索一个可枚举的东西并且正在徘徊一个愚蠢的事情:是否可以循环方法调用?假设我在fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 类中有一个方法getDocuments,它返回Document,那么我可以这样做:

IEnumerable

或者将变量分配给该结果并在变量上循环是否更好?

5 个答案:

答案 0 :(得分:4)

方法调用被评估一次,然后循环使用返回的IEnumerable

简而言之,你所做的很好。

虽然有可能出现小问题。如果表达式树作为IEnumerable返回,并且foreach正在执行时,基础数据结构将被编辑,它将引发异常

答案 1 :(得分:2)

循环获取方法结果是可以的,它只会被评估一次。因此,没有必要使用临时变量。

答案 2 :(得分:2)

在两种情况下你都在循环同一个东西,唯一的区别是你是否也给它一个名字(通过声明一个变量)。您可能希望这样做是为了提高可读性,或者多次访问它 - 多次枚举 1 ,或者更容易调试 2

1 通常不建议使用,因为可能存在副作用,或者只是浪费性能。在多次枚举同一个集合之前调用ToArrayToList通常会更好。

2 请注意,如果你"展开"调试器下的变量,你实际上是在枚举它,这可能会出现副作用(如上所述)。

答案 3 :(得分:2)

您可以执行此操作,但请注意,如果方法调用返回空引用而不是空IEnumerable,则在尝试迭代时将获得System.NullReferenceException

将方法调用结果存储在变量中本身不会解决此问题,但是在执行foreach循环之前,您将有机会检查null。

答案 4 :(得分:1)

for循环中的doc.getDocuments()计算并返回一个结果,并且在此结果上迭代var doc。每次循环运行时都不会调用此方法。因此,可以在循环中使用此方法。