2010-12-08 24 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();