Декомпилированная сборка.NET имеет '&' после ошибки типа

Я унаследовал несколько сборок, которые, насколько мне известно, были созданы с использованием Visual Studio 2005, .NET Framework 1.1(?) И VB.NET. К сожалению, исходный код больше не доступен для меня. В результате я использовал dotPeek для декомпиляции сборок (как C#) и попыток реверс-инжиниринга проектов. Полученный исходный код имеет несколько строк, которые выглядят примерно так:

// ISSUE: explicit reference operation
// ISSUE: variable of a reference type
string& szDataDescr = @str;

"Строка &" для меня чужда (и Visual Studio тоже явно). Visual Studio 2015 не распознает это как допустимое, и я получаю ошибки компиляции. Является ли '&' чем-то, что добавлено dotPeek, или это какая-то устаревшая конструкция.NET, которая была верна тогда? Подобный комментарий появляется везде, где используется шаблон 'type&', поэтому я предполагаю, что он связан.

1 ответ

Решение

Знак & после имени типа указывает, что это ссылочный тип, а знак @ перед именем переменной создает ссылку на эту переменную.

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

Лучшее решение - использовать другой декомпилятор.

Проверьте здесь для получения дополнительной информации о том, что & делает в IL.

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