我刚刚使用 DotPeek 反编译了一些 3rd 方源来调试问题。输出代码包含一些不寻常的运算符,AFAIK 不是有效的 C#,所以我想知道它们是什么意思......
摘录看起来像(包括 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 的等效片段,这更有意义,我猜 C# 的反编译没有产生有效的等效项?
'C#'
int& local = @Written;
byte[] numArray2 = this.FInSpool;
int num = (int) __Global.Min(numArray2 == null ? 0L : (long) numArray2.Length, (long) MaxSize);
^local = num;
伊利诺伊州
byte[] expr_22 = this.FInSpool;
Written = (int)__Global.Min((long)((expr_22 == null) ? 0 : expr_22.Length), (long)MaxSize);
所以,我猜“C#”不是很有效?该 IL 将是有效的 C#,不确定为什么 DotPeek 会产生它所做的输出。也许我会为此坚持使用 ILSpy ......?