使用lambda函数重写这个数组操作?

时间:2010-12-08 14:42:14

标签: c# lambda refactoring

我有这个例程来改变数组中的所有元素......

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

sOutputFields是一维string数组。 escapeIncoming()是一个返回string

的函数

我认为这可以重写。

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

..但这似乎什么都不做(虽然没有抛出异常)。所以我试过..

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

..但是我在执行时遇到了这个异常..

“无法将'WhereSelectArrayIterator`2 [System.String,System.String]'类型的对象强制转换为'System.String []'。”

如何解决?

4 个答案:

答案 0 :(得分:3)

Select不会返回可以显式转换为数组的对象。您需要在作业中执行sOutputFields.Select(el => clsSQLInterface.escapeIncoming(el)).ToArray<string>()

答案 1 :(得分:1)

使用:

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

答案 2 :(得分:1)

返回类型是IEnumerable,您需要转换为数组:

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

答案 3 :(得分:0)

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