Перепишите эту манипуляцию с использованием лямбда-функции? - PullRequest
2 голосов
/ 08 декабря 2010

У меня есть эта подпрограмма, которая изменяет все элементы в массиве ...

    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 ]

3 голосов
/ 08 декабря 2010

A Select не возвращает объект, который может быть явно приведен к массиву. Вам нужно будет выполнить sOutputFields.Select(el => clsSQLInterface.escapeIncoming(el)).ToArray<string>() в своем задании.

1 голос
/ 08 декабря 2010

Тип возвращаемого значения - IEnumerable, вам необходимо преобразовать его в массив:

sOutputFields = sOutputFields.Select(el => clsSQLInterface.escapeIncoming(el)).ToArray();
1 голос
/ 08 декабря 2010

использование:

sOutputFields = sOutputFields.Select(el => clsSQLInterface.escapeIncoming(el)).ToArray();
0 голосов
/ 08 декабря 2010
sOutputFields = sOutputFields.Select(el => clsSQLInterface.escapeIncoming(el)).ToArray();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...