문제

초기화 없이 배열에 값을 할당하는 것이 어떻게 가능합니까?

string[] s={"all","in","all"};

I mean why did not the compile show error?.Normally we need to 
initialize ,before assign values.
도움이 되었습니까?

해결책

단지 구문 설탕입니다.

이것:

string[] s = {"all","in","all"};

동일한 코드로 컴파일됩니다.

string[] tmp = new string[3];
tmp[0] = "all";
tmp[1] = "in";
tmp[2] = "all";
string[] s = tmp;

배열 참조는 할당되지 않습니다 s 모든 요소가 할당 될 때까지. 우리가 선언하는이 특별한 경우에는 중요하지 않습니다. 새로운 변수이지만이 상황에서는 다르게 만듭니다.

string[] s = { "first", "second" };
s = new string[] { s[1], s[0] };

객체 및 수집 이니셜 라이저에 대해서도 마찬가지입니다. 변수는 끝에만 할당됩니다.

다른 팁

초기화없이 배열 변수를 선언 할 수 있습니다.

이것 좀 봐http://msdn.microsoft.com/en-us/library/0a7fscd0%28vs.71%29.aspx

"배열에 값을 할당"하는 것이 아닙니다."배열 참조" 유형의 변수를 초기화하고 있습니다.초기화하는 값은 짧은 배열 초기화 구문을 사용하여 생성된 배열에 대한 참조입니다. {...}.이는 배열 유형의 변수 초기화에서만 허용되지만 다음과 정확히 동일합니다. new T[] { ... }, 어디 T 변수의 유형으로부터 추론됩니다.

나는 당신이 이유를 알고 싶다고 생각합니다

 string[] s={"all","in","all"};

다음과 같이 배열을 먼저 초기화 해야하는 경우 작동합니다.

string[] s = new string[];

또는

string[] s = new string[] {"all","in","all"};

대답은 단지 컴파일러 마법입니다. 컴파일러는 초기화를 기반으로 배열을 얼마나 큰지에 따라 알고 있으므로 배열 뒤에서 배열을합니다. 매우 var 키워드, 요점은 입력 해야하는 중복 정보의 양을 제한하는 것입니다.

그만큼 {"all","in","all"} 부분은 초기화입니다. 그만큼 new string[] 곱슬 괄호와 끈은 짧은 손으로 표기되므로 부품을 생략 할 수 있습니다. 보세요 MSDN 단일 치수 배열에서.

string[] s = new string[] { "all","in","all"};

그리고 그 속기 버전

string[] s = {"all","in","all"};

같은 것입니다. 보다 MSDN 자세한 내용은 (배열 섹션 초기화).

C#3 이상의 새 문자열 [] 부품이 필요하지 않습니다.

string[] s = { "all","in","all"};

컴파일러가 조금 더 똑똑하고 당신이 의미하는 바를 해결하는 경우 일뿐입니다. 백엔드 IL은 동일합니다.

허용되기 때문에 단순히 그렇게 할 수 있습니다. 두 단계로 그렇게하는 것은 필요하지 않으므로 이것은 속기입니다. 설탕을 고려하십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top