[英]Trouble compiling some decompiled C# code
我正在反編譯一個開源項目(因為尚未發布最新版本的源代碼)。 使用RedGate的Reflector工具,它給了我這段代碼:
if(somecondition == true)
{
ref Vector3i vectoriRef;
float num17 = length - num;
Vector3i end = vectori3;
(vectoriRef = (Vector3i) &end)[1] = vectoriRef[1] - ((int) num17);
}
somecondition
是一個布爾值。 length
和num
是在代碼外部定義的浮點數。 vectori3
也在代碼外部定義,其類型為Vector3i。 Vector3i類型本質上就是此代碼 ,但x,y和z存儲為整數。
當我嘗試編譯此反編譯代碼時,出現以下錯誤:
關於如何修復此代碼以使其正確編譯以及打算做什么的任何想法?
更新:原來的來源是在他們的倉庫中,但你必須遵循的鏈接和線索迷宮,甚至找到它。 感謝所有張貼的人!
該代碼使用可變值類型,這是C#中的“最差做法”。 我們為可變值類型生成的代碼可能很難正確分析和反編譯。 顯然,您在反編譯引擎中遇到了一個錯誤。 C#不支持給定的語法。 (將來可能會出現;我已經編寫了“ ref locals”的原型,並且效果很好,但是尚不清楚該功能實際上是否對客戶有價值,足以保證完整的設計和實現。)
仔細閱讀代碼,您會看到它的作用: 將 vectori3的副本復制到end中,然后獲取對end的引用(請記住,對值類型的調用的“ this”始終是對變量的引用因為調用可能會使該變量的內容發生變化。)然后使用ref對該變量進行變化。 但為什么?? 這段代碼沒有任何意義 。 為什么要創建變量的本地副本,然后對副本進行變異,然后丟棄變異的副本?
我懷疑您不僅在反編譯器中發現了錯誤,而且還發現了錯誤。 您可能還發現了代碼中的錯誤。
乍一看
if (somecondition)
{
vectori3[1] -= (int)(length - num);
}
我不清楚顯式引用語法-我以前從未見過,也無法讓VS接受它-但最后一行拆分為
vectoriRef = (Vector3i) &end;
vectoriRef[1] = vectoriRef[1] - ((int) num17);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.