2010-12-08 1 views
2

Ich habe diese Routine, die alle Elemente innerhalb eines Arrays ändert ...Umschreiben Sie diese Array-Manipulation mit einer Lambda-Funktion?

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

sOutputFields ist ein eindimensionales Array string. escapeIncoming() ist eine Funktion, die eine string zurückgibt.

Ich dachte, das so neu geschrieben werden könnte ..

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

..aber dies nichts zu tun scheint (obwohl keine Ausnahme werfen). Also habe ich versucht ..

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

..aber ich diese Ausnahme bei der Ausführung erhalten ..

„Kann nicht das Objekt von Typ 'WhereSelectArrayIterator`2 [System.String, System.String]' um 'System.String []' einzugeben. "

wie zu beheben?

+0

Abfrageergebnisse sind unveränderlich, und => ist kein assigment Operator . – asawyer

+0

Ihr LINQ-Code wird nicht neu geschrieben, sondern erstellt eine neue Sammlung – Max

Antwort

1

Der Rückgabetyp ist ein IEnumerable, müssen Sie ein Array konvertieren:

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

Danke :) Ich sehe das ToArray () ist nicht erforderlich, nur ToArray(). Warum das? –

3

Ein Select gibt kein Objekt zurück, das explizit in ein Array umgewandelt werden kann. Sie müssten sOutputFields.Select(el => clsSQLInterface.escapeIncoming(el)).ToArray<string>() in Ihrer Aufgabe tun.

+1

'.ToArray()' sollte ausreichen. –

1

Verwendung:

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