2012-03-01 4 views
-8

Я хочу иметь массив в классе, который может использовать методы самого класса. Я хочу оценивать массив методом и читать другим, как я могу это сделать с помощью C#? благодаряоценка массива как поля класса?

class Something 
{ 
    Double[] arrayName = new Double[20]; 
    public void Method() 
    { 
     arrayName[index] = value; 
     index++; 
    } 
} 
+0

Что вы подразумеваете под «оценкой массива методом»? –

+0

Добавил код из вашего комментария к вашему вопросу (приспосабливаясь к моим предпочтениям стандартов), если я неверно представил его, пожалуйста, настройте. –

ответ

2
public class Foo 
{ 
    private SomeType[] _someArrayField; 

    public void SomeMethod() 
    { 
     // you can access the _someArrayField field here 
    } 
} 
+0

+1 даже с подчеркиванием;) –

+0

@AdamRobinson, конечно, я предпочитаю префикс полей с '_' в качестве условного обозначения. –

+0

Правильно, только дружеский удар; Мне лично это не нравится, но это вопрос вкуса. –

0

вами информация раскрыта о проблеме запутанно (вероятно, из-за языкового барьера), но это одна из двух проблем:

  1. Вы пытаетесь для доступа к arrayName извне контекста Something (как в другом классе) проблема заключается в уровне доступа arrayName (уровень доступа по умолчанию - private). Если вам нужно разделить arrayName поле с другим классом, то вы можете просто добавить префикс, public, например, так:

    класс Что-то { // Предположим, что вы index определены где-то общественное двойное [] ИмяМассива = новый двойной [ 20]; public void Method() { arrayName [index] = value; индекс ++; } }

  2. Вы пытаетесь присвоить значение элемента массива. Код, который у вас должен, должен соответствовать размеру массива, который в вашем случае будет равен index = 20 (или 21 элемент). Как только произойдет следующая итерация, вы столкнетесь с IndexOutOfBoundsException, потому что в этом массиве недостаточно места для следующего элемента.

Я рекомендую переключиться на List<Double>, который подобен иметь переменную массив длины. Его реализация будет выглядеть так:

class Something 
{ 
    List<Double> listName = new List<Double>(); 
    public void Method() 
    { 
     listName[index] = value; 
     index++; 
    } 
} 

Но если вы не можете изменить тип коллекции (хотя я хотел бы предложить, если вам нужна эта функция), вы можете изменить размер массива, если index больше, чем размер arrayName. Я могу привести пример (или вы можете найти один из многих через простой поиск), если это окажется тем, что вы ищете.

Смежные вопросы