방금 C #을 배우기 시작했고 배열 소개에서 변수를 배열로 설정하는 방법을 보여 주었지만 할당시 배열의 길이를 지정해야하는 것 같습니다. 정렬?
답변:
배열에는 길이가 지정되어야합니다. 여러 요소를 허용하려면 List클래스를 사용하십시오 .
예를 들면 :
List<int> myInts = new List<int>();
myInts.Add(5);
myInts.Add(10);
myInts.Add(11);
myInts.Count // = 3
"Arrays must be assigned a length"- static외부의 메서드 Main()에서 선언을 String[] tokens = null하고 초기화하지 않았지만 어떻게 오류 "Hello.World".Split('.')없이 호출 할 수 System.NullReferenceException있었습니까?
List<>길이를 알 수없는 '배열'을 만드는 데 사용 합니다.
.가 List<>.ToArray()아닌 실제 배열을 반환하는 데 사용 합니다 List.
var list = new List<int>();
list.Add(1);
list.Add(2);
list.Add(3);
var array = list.ToArray();
약간의 배경 정보 :
말했듯이, 동적 컬렉션을 원하면 List<T>. 내부적으로 List는 스토리지에도 배열을 사용합니다. 이 배열은 다른 배열과 마찬가지로 고정 된 크기를 갖습니다. 배열이 크기가있는 것으로 선언되면 변경되지 않습니다. 에 항목을 List추가하면 배열에 추가됩니다. 처음에는 List길이가 16이라고 생각하는 배열로 시작합니다. 17 번째 항목을에 추가하려고 List하면 새 배열이 할당되며 이는 이전 배열의 두 배인 것 같습니다. , 그래서 32 항목. 그런 다음 이전 배열의 내용이 새 배열로 복사됩니다. 따라서 List외부 관찰자에게는 동적으로 보일 수 있지만 내부적으로는 규칙도 준수해야합니다.
그리고 짐작 하셨겠지만, 배열의 복사 및 할당은 자유롭지 않으므로 가능한 한 적은 수를 목표로해야 List하며 배열의 초기 크기를 (의 생성자에서 ) 지정할 수 있습니다 . 완벽한 시나리오에서는 원하는 모든 것을 담을 수있을만큼 충분히 큽니다. 그러나 이것은 마이크로 최적화이며 그것이 당신에게 중요하지 않을 것 같지만 실제로 무엇을하고 있는지 아는 것은 항상 좋습니다 .
크기가 변수로 설정된 배열을 만들 수 있습니다.
int size = 50;
string[] words = new string[size]; // contains 50 strings
그러나 100 단어가 필요하다고 결정하면 나중에 그 크기를 변경할 수 없습니다. 크기가 정말 동적이어야하는 경우 다른 종류의 데이터 구조를 사용해야합니다. 시험List .
string[] words = new string(',', size - 1).Split(',');그들이로 초기화하고 지금 "".
List<int[]> myInts = new List<int[]>();작동 할 수 있습니다.