2011-04-26 7 views
5

Sono nuovo di C# (in precedenza lavorando su C++), ho usato per passare array per funzionare con indice specifico. Ecco il codice in C++,Passare l'array per funzionare da un indice specifico in C# .Net

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

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

posso fare qualcosa di simile in C# .NET *? *

+0

Non credo sia possibile fare una cosa del genere. – alex

risposta

5

Poiché la matrice è enumerabile, è possibile utilizzare LINQ function Skip.

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

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

Ha funzionato Devo aggiungere ToArray dopo l'istruzione skip. myArray.Skip (1) .ToArray() – vrajs5

+1

@ vrajs5: pensare di rendere MyFunc accettando IEnumerable , se MyFunc elabora l'array uno dopo l'altro. ToArray() crea una copia di myArray. – Ozan

+0

Ah, è bello, non ho mai visto la funzione Skip di Linq prima. Personalmente, però, sembra così inefficiente penso che cambierei MyFunc per saltare internamente i primi 2 elementi, o anche aggiungere un nuovo parametro per il numero di elemento per MyFunc da cui iniziare ... Suppongo che dipenda ... – jonchicoine

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

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

Vedi qui per maggiori informazioni sulla ref!

+2

Vuole passare parte di un array, non il tutto. Questo è completamente diverso. – alex

0

La versione di linq è la mia preferita. Tuttavia si rivelerà molto molto inefficiente.

Si potrebbe fare

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

e passare mySlice alla funzione

0

.NET ha la struttura System.ArraySegment<T> che affronta questo esatto caso d'uso.

Ma in realtà non ho mai visto questa struttura utilizzata nel codice, con buone ragioni: non funziona. In particolare, non implementa alcuna interfaccia come IEnumerable<T>. La soluzione Linq (= utilizzando Skip) è quindi la migliore alternativa.

0

Probabilmente il modo più semplice per farlo è:

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

e lo chiamano in questo modo:

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

questo stampa 1,2,10,4,5

Problemi correlati