2010-08-11 6 views
1

어떻게 내부 변수 (즉 m_Length) Length 재산권에 의해 식별되는 어레이 또는 그 거 어레이의 모든 항목을 통해 열거있다. I가 배열의 요소가 포함되어 있는지 여부를 확인하고 싶은 경우"asdf".Length> 0 대 "asdf".Any()?

차이가 발생한다.

Dim asdf = { "a"c, "s"c, "d"c, "f"c } 
Dim any = asdf.Any() 
Dim any2 = asdf.Length > 0 

은 (또한 Any이 확장 방법입니다 참고, 나는 고려. 방법 전직을 호출 대 내부 get_Length를 호출의 성능 비교를 먹고 싶어.

+0

shalooooooooooom의 chaver !!!!!!!!!!!!!!!!!!!! –

+0

kachol lavan mamatzav gissaty :) – Shimmy

답변

7

코드의 변수 asdf은 배열이 아니므로 String입니다. 너무 StringLength 속성을 가지고 있으며, 당신이 Any()를 호출 할 수있는 IEnumerable<char>을 구현하는 발생합니다.

그럼에도 불구하고 실제 질문에 답하기 위해 어레이의 길이를 결정하는 데 열거가 필요하지 않습니다. 길이는 h 열의 일부로 저장됩니다.

기술적으로 Length을 사용하면 Any()을 호출하는 것보다 빠릅니다 (배열의 열거자를 생성해야하므로 MoveNext을 한 번 호출해야합니다). 차이는 무시할 수있을 정도로 작습니다. 하지만 변수가 Length인지 확인하는 것이 관습에 더 부합합니다.

3

array.Length되는 속성을하고 O (1) 연산을 수행 할 수 있습니다. 배열의 길이는 생성시 알려 므로 Length 속성에 액세스 할 때 전체 배열을 열거 할 이유가 없습니다. Any()은 상당히 빠르며 컬렉션 유형이 변경 될 수있는 경우에 유용합니다 다른 IEnumerable<T>이긴하지만 길이는 성능 드래그가되지 않습니다.

또한 특정 예제는 문자열이 아닌 배열을 사용하지만 메시지는 동일합니다. 문자열의 길이는 생성시 알려 지므로 Length은 속성에 액세스 할 때 문자열의 문자를 열거 할 필요가 없습니다.