2013-08-06 51 views
-1

我有以下代碼:IEnumerable的 - 的foreach - 一個查詢的結果不能枚舉不止一次

public static string ConvertParamToHTMLString(
          IEnumerable<GetParm_Result> paramList) 
{ 
    foreach (GetParm_Result result in paramList.ToList()) 
    { 
     ... 
     ... 
    } 
} 

我收到以下消息時,它試圖執行的foreach:

查詢的結果不能枚舉多次。

我認爲ToList()會解決這個問題..

+0

您是否可能在該方法的其他地方調用'ToList'(或任何其他可以迭代查詢的方法),還是在將該序列傳遞給方法之前迭代該序列? – Servy

+0

'paramList'從哪裏來?在將它傳遞給函數之前,您是否已經評估過它? – Blorgbeard

+0

是的,我已經評估過了。 –

回答

5

呼叫paramList.ToList()一次,並把它放在一個變量,然後枚舉變量:

var list = paramList.ToList(); 
foreach(var result in list) ... 
foreach(var result in list) ... // No error here 
+0

請注意,問題中的代碼沒有兩個foreach循環。這可能是問題(在這種情況下,問題需要改變),或者這可能是一個不同的問題,這不會解決。 – Servy

+1

我注意到它沒有,只是爲了演示這將如何工作。 – zmbq

0

既然你只顯示執行一次,我假設你在執行查詢之前(使用ToList,AsEnumerable或暗示使用foreach),然後再調用ConvertParamToHTMLString。如果是這種情況,那麼你可以將結果保存在一個變量中並多次使用。實際上,由於您的功能已經接受IEnumerable<T>,您根本不需要更改該代碼!

相關問題