2010-12-08 5 views
2

私は、アレイ内のすべての要素を変化させ、このルーチン...ラムダ関数を使用してこの配列の操作を書き換えますか?

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

sOutputFieldsは、1次元配列ですstringています。 escapeIncoming()は、stringを返す関数です。

私は(例外をスローしませんが)この..but

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

は何もしないように見える。これは、このように書き換えることができると思っていました。だから私は

「型のオブジェクトをキャストすることができません 'WhereSelectArrayIterator`2 [可能System.String、可能System.String]' .. ..私は、実行時にこの例外を取得..but

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

を試してみましたを入力する 'System.String []'。 "

修正方法?

+0

クエリの結果は不変であり、=>はassigment演算子ではありません。 – asawyer

+0

LINQコードは書き換えず、新しいコレクションを作成します。 – Max

答えて

1

戻り値の型はIEnumerableをされ、あなたは配列に変換する必要があります。

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

ありがとう:) ToArrayを参照してください()は、ToArray()だけでは必要ではありません。何故ですか? –

3

Selectは、明示的に配列にキャストできるオブジェクトを返しません。あなたの課題にsOutputFields.Select(el => clsSQLInterface.escapeIncoming(el)).ToArray<string>()をする必要があります。

+1

'.ToArray()'で十分です。 –

1

使用:

sOutputFields = sOutputFields.Select(el => clsSQLInterface.escapeIncoming(el)).ToArray(); 
0
sOutputFields = sOutputFields.Select(el => clsSQLInterface.escapeIncoming(el)).ToArray(); 
関連する問題