Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.89/9: Рейтинг темы: голосов - 9, средняя оценка - 4.89
0 / 0 / 1
Регистрация: 25.02.2016
Сообщений: 134
1

Как получить доступ к элементам массива, вне предела функции, в которой создан массив?

24.09.2018, 21:01. Показов 1765. Ответов 7
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Вопрос в топике.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
namespace q
{
    public partial class Form1 : Form
    {
 
 
        private void CandleStick_Load(object sender, EventArgs e)
        {
            fill();
        }
 
        public void fill()//здесь заполняется массив
        {
         int count=15;
         int[] index = new int[count];
         
         ****************************************
        }
      //здесь не могу получить доступ к массиву(выходит ошибка имя "index" не существует в текущем контексте)
}
}
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.09.2018, 21:01
Ответы с готовыми решениями:

Как получить доступ к элементам массива в классе?
Есть класс, в нем определен массив объектов. Можно ли через свойства получать доступ и...

Как получить доступ к элементам массива работая с ним как с указателем и адресной арифметикой
int array = { {1,2,3}, {1,2},{1,2,3,4}, {1,2,3,4},{1,2,},}; for(int i = 0; i < 25; i++) ...

Можно ли как-то получить доступ к аргументам у функции у которой нет параметров?
void foo(); int main(void) { foo(123, 123, 3412); } void foo() { //can access...

BackgroundWorker. Как получить доступ к элементу управления не из того потока, в котором он был создан
Пробую разместить парсер - ссылка в BackgroundWorker. Результат парсинга должен попадать из...

7
112 / 99 / 80
Регистрация: 30.12.2015
Сообщений: 230
24.09.2018, 21:23 2
Один из вариантов вынести его в тело класса
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
namespace q
{
    public partial class Form1 : Form
    {
        int[] index = new int[count];
 
        private void CandleStick_Load(object sender, EventArgs e)
        {
            fill();
        }
 
        public void fill()//здесь заполняется массив
        {
         int count=15;
         
         
         ****************************************
        }
      //здесь не могу получить доступ к массиву(выходит ошибка имя "index" не существует в текущем контексте)
}
}
1
296 / 125 / 106
Регистрация: 30.10.2015
Сообщений: 690
24.09.2018, 21:25 3
Лучший ответ Сообщение было отмечено quant77 как решение

Решение

Или можно вот так:
C#
1
2
3
4
5
public int[] CreateArray()
{
  //...
  return array;
}
Или:
C#
1
2
3
4
public void Fill(ref int[] array)
{
  //...
}
1
544 / 352 / 119
Регистрация: 17.08.2014
Сообщений: 1,335
25.09.2018, 14:37 4
Цитата Сообщение от Dekap Посмотреть сообщение
int[] index = new int[count];
Не выйдет.
На момент создания класса count не инициализирован и не объявлен. при компиляции будет ошибка.

Цитата Сообщение от Dekap Посмотреть сообщение
public void fill()//здесь заполняется массив
* * * * {
* * * * *int count=15;
****************************************
* * * * }
тут count присваивается локальная переменная и к массиву вверху она смысла не имеет.

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
namespace q
{
    public partial class Form1 : Form
    {
        int[] index = new int[0];
 
        private void CandleStick_Load(object sender, EventArgs e)
        {
            fill();
        }
 
        public void fill()//здесь заполняется массив
        {
         int count=15;
          index = new int[count]
         
         ****************************************
        }
      //здесь не могу получить доступ к массиву(выходит ошибка имя "index" не существует в текущем контексте)
}
}
Так сработает.
1
Эксперт .NET
5871 / 4748 / 2940
Регистрация: 20.04.2015
Сообщений: 8,361
25.09.2018, 14:53 5
Andreyip,
В 5-й строке достаточно объявления:
C#
5
int[] index;
1
544 / 352 / 119
Регистрация: 17.08.2014
Сообщений: 1,335
01.10.2018, 09:23 6
Даценд,
Достаточно. Но я специально сделал так чтобы 100% при обращении к Index массив был инициализирован. Кто знает может он в другом месте как то иначе будет массив использовать..
0
Модератор
Эксперт .NET
15466 / 10712 / 2786
Регистрация: 21.04.2018
Сообщений: 31,531
Записей в блоге: 2
01.10.2018, 10:50 7
Цитата Сообщение от Andreyip Посмотреть сообщение
Даценд,
Достаточно. Но я специально сделал так чтобы 100% при обращении к Index массив был инициализирован. Кто знает может он в другом месте как то иначе будет массив использовать..
Не совсем понятно, что Вы хотите.
Если Вам нужна видимость в любом месте класса, то надо сделать как советуют Даценд, Dekap - объявить массив на уровне класса, а инициализировать в нужном Вам методе.
Если же Вы хотите ограничить видимость массива внутри класса только в определённых методах, то Вам придётся вызывать эти методы из метода где создаётся массив и передать им ссылку на массив.
При необходимости можно сделать это в статических полях.
0
544 / 352 / 119
Регистрация: 17.08.2014
Сообщений: 1,335
03.10.2018, 13:29 8
Элд Хасп,
Я ничего не хочу.
Я исправил ошибку Dekap
А именно
C#
1
int[] index = new int[[B][U][COLOR="Red"]count[/COLOR][/U][/B]];
Где Count вообще не указан.
Поэтому я показал что это работать не будет.
Так же я не знаю какие методы будет использовать ТС вдруг у него будут методы по использованию массива и метод для его заполнения. Если так то если метод использования массива будет вызван до метода заполнения то нужно либо вызвать метод заполнения, либо инициализировать нулевой массив сразу же при создании класса.
Что и было сделано. Как делать решать Тс, я просто объяснил тс что делается и когда.
0
03.10.2018, 13:29
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
03.10.2018, 13:29
Помогаю со студенческими работами здесь

Почему нельзя получить доступ к элементам массива в прокомментированой строке?
int main(int argc, char* argv) { FILE* inptr = fopen ("card.raw", "r"); if (inptr...

Доступ к элементам формы вне класса
Есть форма: class A: public QMainWindow { Q_OBJECT public: QTextEdit* E; }

Как получить доступ к элементам списка?
У меня есть список в который заносятся значения полей из БД private void...

Как получить доступ к элементам вектора
Нашел вот такой код. А вот как получить доступ к элементам вектора? FILE *ToWrite =...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru