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();