È possibile modificare la proprietà Lunghezza di un array con una tecnica?Imposta proprietà Lunghezza array
Ho bisogno di passare prima i membri x di un array a un metodo. I requisiti del progetto mi impediscono da di allocare l'allocazione dell'heap, quindi non posso utilizzare alcun Array.Resize()
o creare un nuovo array.
Non riesco a modificare il codice SetVertices perché appartiene a un'altra libreria. Ha bisogno di V[]
. Non posso passare a IList<V>
o V*
.
public void BuildIt(V[] verts,int x){
verts.Length = x; //Compile error
mesh.SetVertices(verts);
}
Ovviamente il codice non verrà compilato. Ho bisogno di alcune tecniche come i metodi di riflessione o di estensione per mascherare la matrice come piccola senza in realtà creando un array più piccolo. Voglio il metodo SetVertices() per pensare che l'array abbia membri x anche se ne ha di più.
EDIT:
verificato le seguenti approcci e non lavorano:
- stackalloc non funziona perché non crea (o non ho potuto ottenere) un vero e proprio array.
- Sbirciando nel progetto mono ho scoperto che la proprietà Length della matrice chiama i metodi GetLenght() e GetRank() per determinare la lunghezza. Essendo una cattiva pratica a parte, non posso sovrascrivere questo metodo con i metodi di estensione perché i metodi di istanza hanno la precedenza sui metodi di estensione (o c'è un modo per forzare il contrario?).
Iniezione successiva.
EDIT2:
cercato di emettere codice in Array.GetLength()
e Array.Length
. Sembra che non ci sia un modo semplice, affidabile, multipiattaforma e pulito per modificare un corpo del metodo esistente in fase di esecuzione.
Penso che sia impossibile. – dotctor
È quasi impossibile scrivere qualsiasi C# significativo senza allocare qualcosa. Quanto è severo, qual è la ragione sottostante? –
"x" rimane uguale o cambia spesso da una chiamata all'altra? – alexm