Estoy refactorizando una biblioteca que usamos actualmente, y me enfrenta al siguiente problema.Crear una referencia de subcampo en C# (¿usando inseguro?)
Solíamos tener el siguiente material:
class Blah
{
float[][] data;
public float[] GetDataReference(int index)
{
return data[index];
}
}
Por diversas razones, he sustituido esta versión matriz escalonada con una versión de gama dimensionnal 1, la concatenación de matrices internas. Mi pregunta es: ¿cómo puedo devolver una referencia a una matriz secundaria de data
?
class Blah
{
float[] data;
int rows;
public float[] GetDataReference(int index)
{
// Return a reference data from offset i to offset j;
}
}
Estaba pensando que las cosas inseguras y las indicaciones pueden ser útiles, ¿es factible?
+1 se aprende algo nuevo todos los días :-) – WestDiscGolf
De acuerdo, no sabía eso. Voy a mantener mi respuesta (debería funcionar también), pero esta parece ser la "forma correcta" (tm) –
El diseño de la memoria de una matriz dentada hace que no sea práctico utilizar construcciones inseguras para acceder a sus contenidos. Si se usaron matrices multidimensionales, se puede hacer y puede ser beneficioso en casos de esquina (raros) donde el bajo rendimiento de .NET en arreglos multi-tenues es demasiado lento para usted. Pero aún no puede devolver una porción sin copiar y agregar los nuevos metadatos. – Abel