문제

안녕하세요 저는 C# 배열에 문제가 있습니다. 데이터를 저장하려면 배열이 필요합니다 ... 내 코드는

double[] ATmittelMin;
ATmittelMin[zaehlMittel] = Gradient(x, xATmax, y, yATmax);

그러나 컴파일러는 다음과 같이 말합니다. 정의되지 않음 var는 어떻게 고정 된 크기없이 이중 배열을 정의 할 수 있습니까? 정말 감사합니다!

도움이 되었습니까?

해결책

배열은 항상 크기가 고정되어 있으며 그렇게 정의해야합니다.

double[] items1 = new double[10];

// This means array is double[3] and cannot be changed without redefining it.
double[] items2 = {1.23, 4.56, 7.89};

그만큼 List<T> 클래스는 백그라운드에서 배열을 사용하고 공간이 부족할 때 재정의합니다.

List<double> items = new List<double>();
items.Add(1.23);
items.Add(4.56);
items.Add(7.89);

// This will give you a double[3] array with the items of the list.
double[] itemsArray = items.ToArray();

당신은 a를 반복 할 수 있습니다 List<T> 배열처럼 :

foreach (double item in items)
{
    Console.WriteLine(item);
}

// Note that the property is 'Count' rather than 'Length'
for (int i = 0; i < items.Count; i++)
{
    Console.WriteLine(items[i]);
}

다른 팁

내가 보는 것에서 당신이 선언하지 않았습니다 zaehlMittel 변하기 쉬운. 이것이 컴파일러가 불평하는 것 같아요.

그 외에도, 변수의 값을 프로그래밍 방식으로 결정할 수는 있지만 크기의 배열을 생성하려는 순간을 알아야합니다. 이것이 어레이가 작동하는 방식입니다.

그렇게 쉽게 할 수없는 경우 목록이나 세트와 같은 일종의 동적 데이터 구조를 사용하는 것이 좋습니다. 그런 다음 모든 요소가 추가되면 물론 요소의 수를 알고있는 것처럼 여전히 배열을 자유롭게 만들 수 있습니다. toArray() 그것은 심지어 그것을 처리 할 것입니다).

배열을 사용하기 전에 배열을 시작해야합니다.

double[] ATmittelMin = new double[10];
ATmittelMin[zaehlMittel] = Gradient(x, xATmax, y, yATmax);

떠오르는 명백한 해결책은 목록을 사용하는 것입니다.

List<double> ATmittelMin = new List<double>();
ATmittelMin.Add(Gradient(x, xATMax, y, yATMax);

그러나 목록에서 배열로 변환하고 싶지 않다면 나중에 배열을 키울 수 있습니다.

double[] ATmittelMin = new double[10];
// Some code
int index = some_value;
if (index >= TmittelMin.Length)
{
    Array.Resize(ATmittelMin, index+5);  // So we're not constantly resizing the array
}

당신이 많은 일을하고 있기 때문에 이상적이지 않습니다. List 무대 뒤에서하고 있습니다 - 아마도 당신이 할 수있는 것보다 훨씬 더 효율적일 것입니다.

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