Можно ли изменить свойство длины массива с помощью некоторой техники?
Мне нужно передать первые х элементов массива методу. Требования проекта не позволяют мне распределять любое распределение кучи, поэтому я не могу использовать какой-либо Array.Resize()
или создавать новый массив.
Также я не могу изменить код SetVertices, потому что он принадлежит другой библиотеке. Ему нужно V[]
. Я не могу передать IList<V>
или V*
.
public void BuildIt(V[] verts,int x){
verts.Length = x; //Compile error
mesh.SetVertices(verts);
}
Конечно, код не будет компилироваться. Мне нужна техника, например, методы отражения или расширения, чтобы скрыть массив как меньший без, фактически создавая меньший массив. Я хочу, чтобы метод SetVertices() думал, что массив имеет x членов, даже если он имеет больше.
EDIT:
Протестированы следующие подходы, и они не работают:
- stackalloc не работает, потому что он не создает (или не может получить) реальный массив.
- Peeking in mono project Я узнал, что свойство Length массива вызывает методы GetLenght() и GetRank() для определения длины. Если я плохо отношусь к практике, я не могу переопределить этот метод с помощью методов расширения, потому что методы экземпляра имеют приоритет над методами расширения (или есть способ принудительного отказа?).
Теперь попробуем ввести код.
EDIT2:
Пробовал испускать код в Array.GetLength()
и Array.Length
. Кажется, нет простой, надежной кросс-платформы и чистого способа изменения существующего тела метода во время выполнения.