C# 使用lambda函数重写此数组操作?

C# 使用lambda函数重写此数组操作?,c#,lambda,refactoring,C#,Lambda,Refactoring,我有一个改变数组中所有元素的例程 for (int i = 0; i < sOutputFields.GetUpperBound(0); i ++) { sOutputFields[i] = clsSQLInterface.escapeIncoming(sOutputFields[i]); } …但这似乎没有任何作用,但不会引发异常。所以我试着 sOutputFields = (string[])sOutputFields.

我有一个改变数组中所有元素的例程

    for (int i = 0; i < sOutputFields.GetUpperBound(0); i ++)
    {
        sOutputFields[i] = clsSQLInterface.escapeIncoming(sOutputFields[i]);
    }
…但这似乎没有任何作用,但不会引发异常。所以我试着

    sOutputFields = 
       (string[])sOutputFields.Select(el => clsSQLInterface.escapeIncoming(el));
…但我在执行时遇到了这个异常

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


如何修复?

选择不会返回可以显式转换为数组的对象。您需要执行sOutputFields。在作业中选择el=>clssqlininterface.escapeincommingel.ToArray。

使用:

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

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

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

查询结果是不可变的,并且=>不是assignment运算符。您的LINQ代码不会重写,而是创建一个新集合谢谢:我知道ToArray不是必需的,只是ToArray。为什么呢?
sOutputFields = sOutputFields.Select(el => clsSQLInterface.escapeIncoming(el)).ToArray();
sOutputFields = sOutputFields.Select(el => clsSQLInterface.escapeIncoming(el)).ToArray();