Использование параметров ref в linq - PullRequest
0 голосов
/ 06 сентября 2010

У меня есть функция, которая принимает параметр ref и хотела бы использовать его в запросе linq, но компилятор жалуется.

Функция называется BreakLine и разбивает строку на строки в зависимости от длины строки, параметр ref используется для отслеживания того, где она находится в строке при каждом вызове:

string BreakLine(string text, int lineLimit, ref offset);

Запрос:

from pt in productText 
let offset = 0
from ll in lineLimits
select new Line() { Text = BreakLine(pt, ll, ref offset) }

(Линия - простой класс данных)

Ошибка:

"Невозможно передать переменную диапазона 'offset' в качестве параметра out или ref"

Есть ли способ обойти это?

Ответы [ 2 ]

1 голос
/ 06 сентября 2010
Func<string, int, Line> lineFunc = (pt, ll) =>
{
    int offset = 0;
    return new Line() { Text = BreakLine(pt, ll, ref offset) };
};
var test = from pt in productText
            from ll in lineLimits
            select lineFunc(pt, ll);
1 голос
/ 06 сентября 2010

Параметр offset не имеет указанного типа.Попробуйте изменить сигнатуру метода BreakLine на эту:

string BreakLine(string text, int lineLimit, ref int offset);

... но я думаю, это просто опечатка в вашем вопросе.Проблема real в том, что вы получаете ошибку компилятора CS1939 .Цитата из документации:

Переменная диапазона - это переменная только для чтения, которая вводится в выражение запроса и служит идентификатором для каждого последующего элемента в исходной последовательности.Поскольку он не может быть изменен каким-либо образом, нет смысла передавать его по ref или out.Поэтому обе операции недопустимы.

...