2009-08-16 8 views
1

나는이 코드 스 니펫을 다른 게시물에 실었다. 이에이상한 인라인 어레이 초기화

private bool[] GetPageNumbersToLink(IPagedResult result) 
{ 
    if (result.TotalPages <= 9) 
     return new bool[result.TotalPages + 1].Select(b => true).ToArray(); 

    ... 

C# Array initialization - with non-default value

필자의 의견 :이 totalpages의 동일한 길이 bools의 배열을 만듭니다

new bool[result.TotalPages + 1] 

, 기본값은 모두 거짓되고.

.Select(b => true) 

이 그들 중 누구도

.ToArray(); 

LINQ가 IEnumerable을라도 반환하지 않습니다 즉, 해당 항목 만 반환하는 LINQ 쿼리를 사용하므로의 새로운 배열에 다시 갈 필요 처음에는 길이 0을 선택하지 않았습니다.

나는 그것이 그것이하는 것이라고 생각하지만, 어떤 의미가 없다.

+0

"선택"이라는 단어로 혼란스러워 할 때가 있습니다 : ** "필터"** 소스 (그러나'Where'라고합니다); 실제로 그것은 다음을 의미합니다 : ** "프로젝트"** 출처. –

답변

8

(편집 :. 그것이 나를 몰래 편집하지 않는 한 아차,) (게시물을 오해)

아니, 그게 무엇을하고 있는지 아니다. 결과는 효과적이다

Enumerable.Repeat(true, result.TotalPages + 1).ToArray(); 

Select 호출은 전혀 선택 있다는 값에 의존하지 않습니다 - 그냥 입력이 무엇이든 true를 반환합니다. Select은 단지 투영을 수행하지 않습니다. 즉

:

// Array filled with (result.TotalPages + 1) x false 
new bool[result.TotalPages + 1] 

// Sequence of length (result.TotalPages + 1) x true 
.Select(b => true) 

// Array filled with (result.TotalPages + 1) x true 
.ToArray(); 

어쨌든 그것은 비효율적입니다.

public static T[] CreateFilledArray<T>(T value, int size) 
{ 
    T[] ret = new T[size]; 
    for (int i=0; i < size; i++) 
    { 
     ret[i] = value; 
    } 
    return ret; 
} 
+0

이 답변의 첫 번째 줄은 약간 오도하는 것입니다 ... 실제로 OP가 설명하는 것을하지는 않습니다.Select는 모든 유형의 필터를 수행하지 않고 배열의 각 항목에 대해 true를 반환합니다. –

+0

@ spoon16 : 그래, 내 편집 직후에 귀하의 의견 :) –

+0

그것은 마지막 방법은 일반적인 하나의 의미로 보입니다. –

5

.Select(b => true)

이 즉 해당 항목 만, 그들 중 누구도

을 반환하는 LINQ 쿼리를 사용 : 그것은 .NET 같은 것을 제공하지 않는 것을 종종 불행한 일

아니요, 각 항목에 대해 true를 반환한다는 것을 의미합니다.

return new Enumerable.Range(0,result.TotalPages).Select(b => true).ToArray(); 
+0

'Enumerable.Repeat'는 IMO를보다 잘 설명하는 방법입니다. –

+0

네 말이 맞아, 나는 '반복'방법에 대해 잊어 버렸어 ... –

2
: 그것은

이 코드는 그냥 (아무 중간 배열)이 양식을 선호하지 진정한

에 설정된 모든 항목 배열을 만들고 배열 항목의 값에 어떤 테스트를하지 않습니다

.Select (b => true) 부분은 배열의 모든 요소에 대해 "true"를 반환하므로 result.TotalPages + 1 항목을 사용하여 실제로 IEnumerable을 얻은 다음 배열로 변환됩니다.