Синтаксис 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, но недействителен на целевом языке.