2010-12-08 2 views
2

저는 어레이 내의 모든 요소를 ​​변경이 루틴 ...람다 함수를 사용하여이 배열 조작을 다시 작성 하시겠습니까?

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

sOutputFields는 일차원 배열 string있다. escapeIncoming()string을 반환하는 함수입니다.

나는 (예외를 throw하지 않습니다하지만)이 ..하지만

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

아무것도 할 것으로 보인다 ..이가 이렇게 다시 쓸 수 있다고 생각. 그래서 시도 ..

내가 실행 시간에이 예외를 얻을 ..하지만
sOutputFields = 
     (string[])sOutputFields.Select(el => clsSQLInterface.escapeIncoming(el)); 

..

"유형의 개체를 캐스팅 할 수 없습니다 'WhereSelectArrayIterator`2 [선택 System.String, 선택 System.String]'을 'System.String []'을 (를) 입력하십시오. "

수정 방법은 무엇입니까?

+0

쿼리 결과는 불변이며, =>가의 할당은 운영자 아니다 . – asawyer

+0

LINQ 코드는 다시 쓰이지 않고 새로운 컬렉션을 만듭니다. – Max

답변

1

:

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(); 
반환 유형, 당신은 배열로 변환하는 IEnumerable을 필요가있다
0
sOutputFields = sOutputFields.Select(el => clsSQLInterface.escapeIncoming(el)).ToArray(); 
관련 문제