是否可以使用某種技術更改數組的長度屬性?設置數組的長度屬性
我需要將數組的第一個x個成員傳遞給方法。該項目要求阻止我從分配任何堆分配,所以我不能使用任何Array.Resize()
或創建一個新的數組。
另外我無法更改SetVertices代碼,因爲它屬於另一個庫。它需要V[]
。我不能通過IList<V>
或V*
它。
public void BuildIt(V[] verts,int x){
verts.Length = x; //Compile error
mesh.SetVertices(verts);
}
當然代碼不會編譯。我需要一些像反射或擴展方法的技術來將數組僞裝成較小的而不是實際上創建了一個較小的數組。我想SetVertices()方法認爲數組有x個成員,即使它有更多。
編輯:
測試了以下的方法和他們不工作:
- stackalloc不起作用,因爲它不創建(或我無法獲得)真正的陣列。
- 偷看到單聲道項目中我發現數組的Length屬性調用GetLenght()和GetRank()方法來確定長度。拋開一個不好的做法,我不能用擴展方法重寫此方法,因爲實例方法優先於擴展方法(或者有其他方法強制執行)。
接下來會嘗試代碼注入。
EDIT2:
試圖以發射代碼到Array.GetLength()
和Array.Length
。看起來沒有簡單,可靠,跨平臺和乾淨的方式來在運行時更改現有的方法體。
我認爲這是不可能的。 – dotctor
在沒有分配任何東西的情況下編寫任何有意義的C#幾乎是不可能的。這有多嚴格,其根本原因是什麼? –
「x」保持不變,或者它經常從一次呼叫變爲另一次呼叫? – alexm