DotPeekを使用して、問題をデバッグするためにサードパーティのソースを逆コンパイルしました。出力コードには、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;
ですか?
OK、これは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;
IL
byte[] expr_22 = this.FInSpool;
Written = (int)__Global.Min((long)((expr_22 == null) ? 0 : expr_22.Length), (long)MaxSize);
それで、私は「C#」が完全に有効ではないと思いますか?そのILは有効なC#であり、DotPeekが出力を生成した理由はわかりません。たぶん私はこれのためにILSpyに固執するでしょう...?