Я только что декомпилировал какой-то сторонний источник для отладки проблемы, используя DotPeek. Код вывода содержит некоторые необычные операторы, которые AFAIK недействительны С#, поэтому мне интересно, что они означают...
Экстракт выглядит (с комментариями Dotpeek, поскольку они, вероятно, актуальны);
protected internal void DoReceive(ref byte[] Buffer, int MaxSize, out int Written)
{
Written = 0;
.
.
.
// ISSUE: explicit reference operation
// ISSUE: variable of a reference type
int& local = @Written;
int num = SomeMethod();
.
.
.
// ISSUE: explicit reference operation
^local = num;
}
Итак, 3 необычных оператора там... int& = @Written
Кажется, присваивается указатель на переменную, которая называется бессмысленно с символом @?
Но что такое ^local = num;
???
ОК, вот эквивалентный фрагмент от ILSpy, который имеет больше смысла, я думаю, что декомпиляция с С# не привела к действительному эквиваленту?
'С#'
int& local = @Written;
byte[] numArray2 = this.FInSpool;
int num = (int) __Global.Min(numArray2 == null ? 0L : (long) numArray2.Length, (long) MaxSize);
^local = num;
IL
byte[] expr_22 = this.FInSpool;
Written = (int)__Global.Min((long)((expr_22 == null) ? 0 : expr_22.Length), (long)MaxSize);
Итак, я думаю, что "С#" не совсем допустимо? Этот IL был бы действительным С#, не зная, почему DotPeek произвел результат, который он сделал. Возможно, я буду придерживаться ILSpy для этого...?