سؤال

ومرحبا لدي مشكلة مع c # صالحة. أحتاج إلى مجموعة لتخزين بعض البيانات في وجود ... كود بلدي هو أن

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

ولكن يقول المترجم: فار غير معرف كيف يمكنني تحديد مجموعة مزدوجة من دون حجم ثابت؟ شكرا جزيلا!

هل كانت مفيدة؟

المحلول

وصالحة ثابتة دائما في الحجم، ويجب أن تكون محددة مثل ذلك:

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();

ويمكنك تكرار خلال 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