Primo Chalice Ответов: 2

Как назначить переменную итерации foreach?


Привет,

У меня есть
foreach
цикл запущен, и я хочу присвоить значения переменной, но не могу этого сделать. Это показывает мне ошибку:

cannot assign because it is a foreach iteration variable


Тот же код в Visual Basic работает нормально:

For Each spline As String In Regex.Split(replicFile, vbNewLine)
           Label9.Text = spline
           Me.Refresh()
           Do While spline.EndsWith(Chr(10)) Or spline.EndsWith(Chr(13))
               spline = spline.Substring(0, spline.Length - 1)
           Loop
           Do While spline.StartsWith(Chr(10)) Or spline.StartsWith(Chr(13))
               spline = spline.Substring(1, spline.Length - 1)
           Loop


Пожалуйста помочь.

С уважением
Аман Чаурасия

Что я уже пробовал:

foreach (string spline in Regex.Split(replicFile, Environment.NewLine))
			{
				Label9.Text = spline;
				this.Refresh();
				while (spline.EndsWith(('\n').ToString()) || spline.EndsWith(('\r').ToString()))
				{
					spline = spline.Substring(0, spline.Length - 1);
				}
				while (spline.StartsWith(('\n').ToString()) || spline.StartsWith(('\r').ToString()))
				{
					spline = spline.Substring(1, spline.Length - 1);
				}

2 Ответов

Рейтинг:
0

Richard Deeming

Используйте вторую переменную:

foreach (string s in Regex.Split(replicFile, Environment.NewLine))
{
    string spline = s;
    
    Label9.Text = spline;
    this.Refresh();
    
    while (spline.EndsWith(('\n').ToString()) || spline.EndsWith(('\r').ToString()))
    {
        spline = spline.Substring(0, spline.Length - 1);
    }
    while (spline.StartsWith(('\n').ToString()) || spline.StartsWith(('\r').ToString()))
    {
        spline = spline.Substring(1, spline.Length - 1);
    }

NB: Вы можете заменить их оба while циклы с одним вызовом к Струна.Отделка[^]:
foreach (string s in Regex.Split(replicFile, Environment.NewLine))
{
    string spline = s;
    
    Label9.Text = spline;
    this.Refresh();
    
    spline = spline.Trim(new[] { '\r', '\n' });


Рейтинг:
0

Dirk Bahle

Вы должны использовать эквивалент

for (int i=0; i< ;++) {}
или
while
цикл, если вы хотите манипулировать коллекцией во время цикла над ней.

Foreach не поддерживает ваш вариант использования.


Primo Chalice

Хорошо, я так и сделаю. Но тогда как же это работает нормально в Visual Basic?

Dirk Bahle

Не знаю, почему это работает в VB.Net - но foreach будет работать до тех пор, пока вы не измените коллекцию, которую перебираете, - так что вполне вероятно, что вы либо не измените исходную коллекцию, либо, если вы ее измените, изменение будет (неявно?) применено после того, как коллекция будет перебрана ...

F-ES Sitecore

VB.net это другой язык, он позволяет вам делать то, что c# не делает, и наоборот. Спрашиваю почему vb.net позволяет вам что-то делать, а c# - нет, это все равно что спрашивать, почему французы называют то, что они едят, "алиментами", а не "едой".