С Новым годом! Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.65/123: Рейтинг темы: голосов - 123, средняя оценка - 4.65
 Аватар для Kruks
5 / 5 / 6
Регистрация: 14.12.2011
Сообщений: 63

Как создать динамический массив

03.11.2012, 20:29. Показов 22365. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Так случилось, что потребовался "глобальный"(в разных event'ах используется) массив.
Создал класс, объявил его как
C#
1
2
3
4
class Gl
        {
           public static string[] пути = new string[comboBox1.Items.Count + 1];
        }
и.. вся проблема в комбобоксе.
Нужно, что бы размерность массива изменялась, в зависимости от количества элементов в комбобоксе. Компилятор ругается, что нет ссылки на объект. Не очень понимаю как исправить. Прошу помощи
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
03.11.2012, 20:29
Ответы с готовыми решениями:

Re: Как создать динамический массив?
А нормального массива нету? ArrayList тоже что попало, по индексу обратится нельзя ArrayList arr = new ArrayList(); ...

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

Как создать динамический массив?
Динамический массив создаётся подобно тому,как в Си или нет? Пример можно?

9
Master of Orion
Эксперт .NET
 Аватар для Psilon
6101 / 4957 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
03.11.2012, 20:37
Kruks, ну если очень надо, напишите просто оболочку:
C#
1
2
3
4
5
6
{
           public static string[] пути
           {
               get { return comboBox1.Items.Cast<string>().ToArray(); } 
           }
        }
а вообще за программы с русскими идентификаторами нужно предавать анафеме.
0
 Аватар для Kruks
5 / 5 / 6
Регистрация: 14.12.2011
Сообщений: 63
03.11.2012, 20:46  [ТС]
Это писать в тот же класс?
Если да, то всё равно требуется ссылка на объект.

/* пока пишу только для себя, использую русские. а когда иду сдавать, делаю англ */
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6101 / 4957 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
03.11.2012, 20:52
Kruks, это как стирать носки только когда в гости идете. Приучайтесь сразу правильно писать.

Ну у меня же в моем приложении работает Правда у меня немного другое
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
 
namespace Millioner
{
    /// <summary>
    /// Логика взаимодействия для MainWindow.xaml
    /// </summary>
    public partial class MainWindow
    {
        private Button _rightButton;
        private readonly Questions _questions = new Questions();
 
 
        private Button[] Buttons
        {
            get { return ButtonGrid.Children.Cast<Button>().ToArray(); }
            //Оболочка для более удобной работы с ButtonGrid
        }
...
Но приложение рабочее...
0
 Аватар для Kruks
5 / 5 / 6
Регистрация: 14.12.2011
Сообщений: 63
03.11.2012, 21:34  [ТС]
Решил проблему объявив в классе только сам массив, не указав размерность.
Затем при начальной загрузке формы указал начальный размер, а в дальнейшем при каждом добавлении использовал Array.Resize
1
Master of Orion
Эксперт .NET
 Аватар для Psilon
6101 / 4957 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
03.11.2012, 21:37
Kruks, откровенно говоря - бред. Для массивов изменяемых размеров следует использовать класс List, а излишнее использование Resize - пагубно.
1
2 / 2 / 1
Регистрация: 17.03.2012
Сообщений: 16
03.11.2012, 21:41
WPF:

Разметка:

XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<Window x:Class="demo8._0.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525" Name="mainWindow">
    <Grid>
        
        <ComboBox HorizontalAlignment="Center" VerticalAlignment="Center" MinWidth="100" 
                  Margin="5" Padding="5" Name="comboBoxWays">
            <ComboBoxItem Content="Первый"></ComboBoxItem>
            <ComboBoxItem Content="Второй"></ComboBoxItem>
            <ComboBoxItem Content="Третий"></ComboBoxItem>
        </ComboBox>
        <Button Content="Button" Height="23" HorizontalAlignment="Left" Margin="202,114,0,0" Name="button1" VerticalAlignment="Top" Width="75" Click="button1_Click" />
    </Grid>
</Window>
Код:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
namespace demo8._0
{
    /// <summary>
    /// Логика взаимодействия для MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }
 
        private void button1_Click(object sender, RoutedEventArgs e)
        {
            string message = "";
 
            for (int i = 0; i < MyClass.arrayListForWays.Count; i++)
            {
                message += (MyClass.arrayListForWays[i].ToString() + '\n');
            }
 
            MessageBox.Show(message);
        }
    }
 
    class MyClass
    {
        public static List<ComboBoxItem> arrayListForWays = new List<ComboBoxItem>(new MainWindow().comboBoxWays.Items.Cast<ComboBoxItem>());
 
        public MyClass()
        {  
        }
    }
}
По клику мыши на кнопку выводится сообщение с элементами комбо бокса.
0
 Аватар для Kruks
5 / 5 / 6
Регистрация: 14.12.2011
Сообщений: 63
03.11.2012, 21:47  [ТС]
Psilon, изначально, вся программа работала с листом, но преподаватель захотел, что бы работали непосредственно с динамическими массивами, да еще и на разных языках.
0
2 / 2 / 1
Регистрация: 17.03.2012
Сообщений: 16
03.11.2012, 22:01
Добавите это к предыдущему коду и получите функционал, позволяющий добавлять элементы в коллекцию и из неё в CheckBox.

XML
1
<Button Content="Add" Height="23" HorizontalAlignment="Left" Margin="283,114,0,0" Name="buttonAdd" VerticalAlignment="Top" Width="75" Click="buttonAdd_Click" />
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public partial class MainWindow : Window
{
        int i = 0;
 
        private void buttonAdd_Click(object sender, RoutedEventArgs e)
        {
            ComboBoxItem newComboBoxItem = new ComboBoxItem();
 
            newComboBoxItem.Content = String.Format("Следующий № " + "{0}", i);
            i++;
 
            MyClass.arrayListForWays.Add(newComboBoxItem);
 
            this.comboBoxWays.Items.Add(MyClass.arrayListForWays.Last<ComboBoxItem>());
        }
}
Добавлено через 2 минуты
Цитата Сообщение от Kruks Посмотреть сообщение
Psilon, изначально, вся программа работала с листом, но преподаватель захотел, что бы работали непосредственно с динамическими массивами, да еще и на разных языках.
Вы что-то путаете. List<T> - динамический массив. Обладает той же функциональностью, что и необобщенный класс ArrayList, который работает только с object.
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6101 / 4957 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
03.11.2012, 23:19
Kruks, динамический массив в том же паскале - это и есть список. Хотя бы потому, что совершенно спокойно компилируется такой код
Pascal
1
2
3
4
5
var
 a: array of integer;
begin
 a := nil;
...
А вообще понятие "динамического массива" это как раз подмена понятий. Никаких динамических массивов нет: есть только обычные массивы, с создаваемыми однажды размерами и списки, имеющие произвольный размер.
Ispotiq, если учесть, что кнопки определены не в разметке, а программно добавляются/удаляются, этот способ не поможет... К тому же мне ничто не мешает изначально создать массив кнопок, и просто продублировать в нем ссылки на элементы, добавленные в грид. То есть
C#
1
2
3
4
5
6
7
8
private Button[] buttons;
...
for(int i = 0; i < n; i++)
{
   button[i] = new Button();
   buttongrid.Children.Add(button[i]);
}
...
просто мне так захотелось.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
03.11.2012, 23:19
Помогаю со студенческими работами здесь

Как создать не строготипизированный динамический массив
Как создать не строготипизированный динамический массив в c#?

Как создать динамический массив string
Как сделать? А то у stringp приходится менять размер, чтобы добавить еще 1 элемент

Как создать двумерный динамический массив
Как создать двумерный массив на C# (размерность неизвестна, вычисляется в ходе работы программы) и динамически заполнить его? пробывал...

Как создать двумерный динамический массив на указателях?
Имеется вот такой код, но если поставить **b выбивает ошибку; unsafe public static void smejn() { int kol...

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


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru