2011-04-26 18 views
5

Soy nuevo en C# (anteriormente trabajaba en C++), solía pasar matriz para funcionar con índice específico. Aquí está el código en C++,Pase matriz para funcionar desde índice específico en C# .Net

void MyFunc(int* arr) { /*Do something*/ } 

//In other function 
int myArray[10]; 
MyFunc(&myArray[2]); 

¿Puedo hacer algo como esto en C# .Net *? *

+0

No creo que sea posible hacer tal cosa. – alex

Respuesta

5

Como la matriz es Enumerable, puede hacer uso de LINQ function Skip.

void MyFunc(int[] array){ /*Do something*/ } 

int[] myArray = { 0, 1, 2, 3, 4, 5, 6 } 
MyFunc(myArray.Skip(2)); 
+1

Funcionó. Tengo que agregar ToArray después de omitir la declaración. myArray.Skip (1) .ToArray() – vrajs5

+1

@ vrajs5: piense en hacer que MyFunc acepte IEnumerable , si MyFunc procesa la matriz uno tras otro de todos modos. ToArray() crea una copia de myArray. – Ozan

+0

Ah, eso es genial, nunca antes había visto la función Linq Skip. Personalmente, eso parece tan ineficiente, creo que simplemente cambiaría MyFunc para saltear internamente los primeros 2 elementos, o incluso agregaría un nuevo parámetro para el número de elemento para que MyFunc comience en ... Supongo que depende ... – jonchicoine

-2
public void MyFunc(ref int[] arr) 
{ 
    // Do something 
} 

int[] myArray = .... ; 
MyFunc(ref myArray); 

Vea aquí para más información sobre ref!

+2

Quiere pasar parte de una matriz, no todo. Eso es completamente diferente. – alex

0

La versión de linq es la que prefiero. Sin embargo, demostrará ser muy muy ineficiente.

Usted podría hacer

int myArray[10]; 
int mySlice[8]; 
Array.Copy(myArray, 2, mySlice, 0); 

y pasar a la función mySlice

0

.NET tiene la estructura System.ArraySegment<T> que se ocupa de este caso de uso exacto.

Pero nunca he visto esta estructura utilizada en el código, con buenas razones: no funciona. Notablemente, no implementa ninguna interfaz como IEnumerable<T>. La solución de Linq (= utilizando Skip) es, en consecuencia, la mejor alternativa.

0

Probablemente la forma más sencilla de hacer esto es:

public void MyFunction(ref int[] data,int index) 
    { 
     data[index]=10; 
    } 

y lo llaman de esta manera:

int[] array= { 1, 2, 3, 4, 5 }; 
Myfunction(ref array,2); 
foreach(int num in array) 
    Console.WriteLine(num); 

Esto imprimirá 1,2,10,4,5

Cuestiones relacionadas