Синтаксис C# for-loop

У меня есть хороший вопрос о циклическом выражении цикла for в C#.

Мне всегда нравится изучать и расширять свои знания, поэтому я часто использую свой отражатель, чтобы смотреть и учиться у других. В последнее время я искал в сборке, которая, я полагаю, является сборкой C#.

Я сталкивался с этим:

public virtual void DoRows(Parse rows)
{
  for (; rows != null; {
    Parse more;
    rows = more;
  }
  )
  {
    more = rows.More;
    this.DoRow(rows);
  }
}

Я никогда не знал, что смогу использовать блок кода в своем выражении цикла. Так что я запустил MSDN и пошел искать справочник по языку C#, но ничего не нашел.

Ссылка на C++ показывает некоторые интересные вещи (http://msdn.microsoft.com/en-us/library/b80153d8.aspx), но я не разработчик C++ и у меня сильное чувство, что ассемблер не был написан на C++,

dotPeek говорит, что сборка v4.0.30319 / msil.

Теперь вот вопросы: - Это кодовая конструкция C++ или C#?! - Можем ли мы сделать такие вещи в C#?

Я не могу воспроизвести код, который выглядит так и компилируется в VS2010.

@edit: изменил слово сборки в код-конструкции.

@edit II: Спасибо за все ваши ответы. Я думаю, что это либо ошибка в отражателе dotPeek, либо мы нашли несколько пасхальных яиц для выражения цикла. Вот что говорит Red Gate о том же методе:

public virtual void DoRows(Parse rows)
{
    while (rows != null)
    {
        Parse more = rows.More;
        this.DoRow(rows);
        rows = more;
    }
}

2 ответа

Решение

Компиляция в IL - это операция "многие к одному", и у декомпиляторов есть правила относительно того, какой из множества вариантов они выбирают при декомпиляции. Часто разные языки производят IL, который невозможно воспроизвести непосредственно на другом языке.

В этом случае либо декомпилятор выбрал неверно, и созданный C# является недействительным (ошибка в декомпиляторе), либо он не может декомпилировать код в эквивалентный C#.

Нет такой вещи как сборка C++ или C#. Как только код скомпилирован, это ILCode. Отражатель берет этот ILCode и декомпилирует его на выбранный вами язык.

Это может привести к коду, который действителен в ILCode, но недействителен на целевом языке.

Другие вопросы по тегам