2010-12-08 22 views
2

我有此例程其改變的數組中的所有元素...使用lambda函數重寫這個數組操作?

for (int i = 0; i < sOutputFields.GetUpperBound(0); i ++) 
    { 
     sOutputFields[i] = clsSQLInterface.escapeIncoming(sOutputFields[i]); 
    } 

sOutputFields是一個維陣列stringescapeIncoming()是一個返回string的函數。

我想這可能是因此重新編寫..

sOutputFields.Select(el => clsSQLInterface.escapeIncoming(el)); 

..但是這似乎什麼也不做(但不拋出異常)。所以,我想..

sOutputFields = 
     (string[])sOutputFields.Select(el => clsSQLInterface.escapeIncoming(el)); 

..但我在執行時得到這個例外..

「無法投類型的對象WhereSelectArrayIterator`2 [System.String,System.String]'鍵入'System.String []'。「

如何解決?

+0

查詢結果是不可改變的,並且=>不是分配新建分配FY運營商。 – asawyer 2010-12-08 14:45:21

+0

您的LINQ代碼不會重寫,而是創建一個新的集合 – Max 2010-12-08 14:46:24

回答

1

返回類型爲IEnumerable,你需要轉換爲數組:

sOutputFields = sOutputFields.Select(el => clsSQLInterface.escapeIncoming(el)).ToArray(); 
3

Select不返回可以顯式轉換爲數組的對象。你需要在你的任務中做sOutputFields.Select(el => clsSQLInterface.escapeIncoming(el)).ToArray<string>()

+1

`.ToArray()`應該就足夠了。 – 2010-12-08 14:48:22

1

使用:

sOutputFields = sOutputFields.Select(el => clsSQLInterface.escapeIncoming(el)).ToArray(); 
0
sOutputFields = sOutputFields.Select(el => clsSQLInterface.escapeIncoming(el)).ToArray();