2010-05-25 6 views
7

Intellisense와 MSDN doc on string.Split에 따르면 string.Split에는 매개 변수가없는 오버로드가 없습니다. 그래도 입력하면string.Split()의 문서화되지 않은 오버로드?

string[] foo = bar.Split(); 

컴파일됩니다. 그리고 그것은 작동합니다. Visual Studio 2008과 2010 모두에서이를 확인했습니다. 두 경우 모두 intellisense는 매개 변수없는 오버로드를 표시하지 않습니다.

이유가 있습니까? MSDN/Intellisense 문서에서 다른 누락 된 오버로드가 있습니까? 일반적으로 Intellisense에서 과부하를 검색하는 것은 사용할 오버로드를 가장 잘 결정하는 방법입니다. .Net 프레임 워크에서 다른 옵션을 사용할 수 없다고 생각하는 것을 싫어합니다.

편집 : 위와 같이 공백으로 나뉩니다.

+0

ummm - neil - 질문에 대한 답변을 얻었습니까? lolzalot –

답변

16

왜냐하면 Split에는 params 과부하가 있기 때문입니다. 매개 변수를 지정하지 않으면 빈 배열을 제공하는 것과 같습니다. 즉, this overload으로 전화하는 것입니다. 여기

"some text".Split(new char[0]); 

the documentation on the params keyword이다로서

"some text".Split(); 

는 동일하다. 여러분이 아시다시피, 메소드에 가변 개수의 매개 변수를 제공하는 데 사용됩니다. 이 숫자는 0 일 수 있습니다.

+1

좋은 답변이 많이 있지만 첫 번째 이후로 한번 받아 들일 것입니다. –

1
public string[] Split(params char[] separator) 

PARAMS는 I가이 String.Split 과부하 일치 내기 0 이상의

8

이다

public string[] Split(params char[] separator) 
{ 
    return this.Split(separator, 0x7fffffff, StringSplitOptions.None); 
} 

0 인수는이 함수에 허용된다. 구분 기호가 없으므로, it defaults to white space.

+0

+1 "공백으로 기본 설정"... 감사합니다. 나는 쉼표로 맹세했지만 그때 코드가 예상대로 작동하지 않을 수있었습니다. Java를 기억하고 있어야합니다. –

2

String.Split()에는 많은 오버로드가 있습니다. 당신은 그 overloads의 아무도가 매개 변수가 적은다는 것을 정확하다, 그러나, 그 중 하나는 가변적이다 : String.Split(params char[]). 인수 목록의 가변 길이 부분은 0을 포함하여 여러 개의 인수가 될 수 있습니다. 즉, 여기서 호출하는 오버로드입니다.

5

사실 당신이 여기에 전화하는 것은 사항 String.split 당신은 매개 변수에 지정된 형의 인수의 쉼표로 구분 된 목록을 보낼 수 있습니다

params (C# reference)

(PARAMS 문자 [] 구분)입니다 선언 또는 지정된 유형의 인수 배열을 반환합니다. 도 인수를 보낼 수 없습니다.

3

'매개 변수 배열 []'과 같이 매개 변수를 표시하는 약점이 있습니다. MSDN에서 설명하는대로 다음 메서드의 서명을 참조하십시오. 따라서 빈 배열을 전달하는 것입니다.

public string[] Split(params char[] separator) 
관련 문제