2010-12-08 41 views
2

J'ai cette routine qui modifie tous les éléments dans un tableau ...Réécrivez cette manipulation de tableau en utilisant une fonction lambda?

for (int i = 0; i < sOutputFields.GetUpperBound(0); i ++) 
    { 
     sOutputFields[i] = clsSQLInterface.escapeIncoming(sOutputFields[i]); 
    } 

sOutputFields est une dimension tableau string. escapeIncoming() est une fonction qui renvoie un string.

Je pensais que cela pourrait être réécrite ainsi ..

sOutputFields.Select(el => clsSQLInterface.escapeIncoming(el)); 

..mais cela semble ne rien faire (mais ne jette pas une exception). J'ai donc essayé ..

sOutputFields = 
     (string[])sOutputFields.Select(el => clsSQLInterface.escapeIncoming(el)); 

..mais je reçois cette exception au moment de l'exécution ..

« Impossible de jeter l'objet de type 'WhereSelectArrayIterator`2 [System.String, System.String]' pour taper 'System.String []'. "

comment réparer?

+0

résultats de requête sont immuables, et => est pas un opérateur assigment . – asawyer

+0

Votre code LINQ ne réécrit pas, il crée plutôt une nouvelle collection – Max

Répondre

1

Le type de retour est un IEnumerable, vous devez convertir en un tableau:

sOutputFields = sOutputFields.Select(el => clsSQLInterface.escapeIncoming(el)).ToArray(); 
+0

Merci :) Je vois le ToArray () n'est pas nécessaire, juste ToArray(). Pourquoi donc? –

3

Une sélection ne renvoie pas d'objet pouvant être explicitement converti en tableau. Vous devez faire sOutputFields.Select(el => clsSQLInterface.escapeIncoming(el)).ToArray<string>() dans votre mission.

+1

'.ToArray()' devrait suffire. –

1

utilisation:

sOutputFields = sOutputFields.Select(el => clsSQLInterface.escapeIncoming(el)).ToArray(); 
0
sOutputFields = sOutputFields.Select(el => clsSQLInterface.escapeIncoming(el)).ToArray();