Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/21: Рейтинг темы: голосов - 21, средняя оценка - 4.71
0 / 0 / 0
Регистрация: 20.12.2018
Сообщений: 13

Как передать массив через out в метод?

14.09.2019, 12:40. Показов 4277. Ответов 2

Студворк — интернет-сервис помощи студентам
Не могу передать массив в метод(Print()) через out, так как компилятор считает его не инициализированным, но после вызова одного из метода FillRandom или FillBoard значения в массиве есть.

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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
using System;
 
namespace consoleFirst
{
    class Program
    {
        // Размерность массивов.
        const int n = 5;
        static void Main(string[] args)
        {
            int[] array1 = new int[n];
            int[] array2 = new int[n];
            Console.WriteLine("Установленная размерность = 5");
            Console.WriteLine("Ввести с клавиатуры - 1\nЗаполнить случайными числами - 2");
            bool b = true;
            int choice = 0;
            while (b == true)
            {
                if (!int.TryParse(Console.ReadLine(), out choice))
                {
                    Console.WriteLine("Введено неверное значение.");
                }              
                else
                {
                    if (choice >= 3 || choice <= 0)
                    {
                        Console.WriteLine("Введено неверное значение.");
                    }
                    else
                    {
                        b = false;
                    }
                }
            }
            switch (choice)
            {
                case 1:
                    FillFromBoard(out array1, out array2);
                    break;
                case 2:
                    FillRandom(out array1, out array2);
                    break;
            }
            /*Console.Write("Массив номер 1 = ");
            for (int i = 0; i < n; i++)
            {
                Console.Write(" ");
                Console.Write(array1[i].ToString(), "  ");
            }
            Console.Write("\nМассив номер 2 = ");
            for (int i = 0; i < n; i++)
            {
                Console.Write(" ");
                Console.Write(array2[i].ToString(), "  ");
            }*/
            Print(out array1, out array2);
            Console.ReadLine();
 
        }
        // Метод для заполнения массива случайными числами.
        static void FillRandom(out int[] array1, out int[] array2)
        {
            array1 = new int[n];
            array2 = new int[n];
            Random rand = new Random();
            for (int i = 0; i < n; i++)
            {
                array1[i] = rand.Next(0, 10);
                array2[i] = rand.Next(0, 10);
            }
        }
        // Метод для заполнения массива с клавиатуры.
        static void FillFromBoard(out int[] array1, out int[] array2)
        {
            int buffer = 0;
            array1 = new int[n];
            array2 = new int[n];
            bool b = true;
            Console.WriteLine("Введите последовательно {0} чисел для первого массива (Через Enter)", n);
            for (int i = 0; i < n; i++)
            {
                b = true;
                while (b == true)
                {
                    if (!int.TryParse(Console.ReadLine(), out buffer))
                        Console.WriteLine("Введено неверное значение.");
                    else
                    {
                        b = false;
                        array1[i] = buffer;
                    }
                }
            }
            Console.WriteLine("Введите последовательно {0} чисел для второго массива (Через Enter)", n);
            for (int i = 0; i < n; i++)
            {
                b = true;
                while (b == true)
                {
                    if (!int.TryParse(Console.ReadLine(), out buffer))
                        Console.WriteLine("Введено неверное значение.");
                    else
                    {
                        b = false;
                        array2[i] = buffer;
                    }
                }
            }
        }
        static void Print(out int[] array1, out int[] array2)
        {
            Console.Write("Массив номер 1 = ");
            for (int i = 0; i < n; i++)
            {
                Console.Write(" ");
                Console.Write(array1[i].ToString(), "  ");
            }
            Console.Write("\nМассив номер 2 = ");
            for (int i = 0; i < n; i++)
            {
                Console.Write(" ");
                Console.Write(array2[i].ToString(), "  ");
            }
        }
    }
}
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
14.09.2019, 12:40
Ответы с готовыми решениями:

Как передать массив в метод?
using System; namespace OOP { class Настройки { public Настройки() { Console.Title =...

Как передать в метод массив структур
Всем привет. Помогите новичку разобраться. Пишу программу на c# VS 2010, столкнулся со следующей проблемой. Допустим у нас есть 2...

Как передать в метод Main массив путей выделенных файлов
Всем привет. У меня такая проблема: программа принимает массив строк(каждая строка это путь к файлу): static void Main(string args) ...

2
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16140 / 11264 / 2888
Регистрация: 21.04.2018
Сообщений: 33,111
Записей в блоге: 2
14.09.2019, 12:50
Лучший ответ Сообщение было отмечено Ave_Wycc220 как решение

Решение

Цитата Сообщение от Ave_Wycc220 Посмотреть сообщение
Не могу передать массив в метод(Print()) через out
Массивы - это ссылочные типы.
Если вам не надо изменять ссылку в переменной хранящей ссылку на массив (а вам не надо), то не надо использовать out.
out служит для передачи значений ИЗ метода.
В вашем случае нужно
C#
110
111
112
113
114
        static void Print(int[] array1, int[] array2)
        {
            Console.WriteLine("Массив номер 1 = " + string.Join(", ", array1));
            Console.WriteLine("Массив номер 2 = " + string.Join(", ", array2));
        }
Добавлено через 46 секунд
C#
56
            Print(array1, array2);
1
0 / 0 / 0
Регистрация: 20.12.2018
Сообщений: 13
14.09.2019, 13:06  [ТС]
Я думал, что, если массив хранит значимые типы, то и он будет значимым, теперь я понял, спасибо большое.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
14.09.2019, 13:06
Помогаю со студенческими работами здесь

Как передать массив через сокет?
Подскажите пожалуйста. Нужно реализовать игру крестики нолики, клиент-сервер. Здесь я могу передать переменную message типа string, а...

Как передать массив через сокет?
Подскажите как передать массив через сокет? Часть кода: byte sdata = null; sdata = Encoding.ASCII.GetBytes(str); ...

Методы и функции, передать массив в метод
В главном методе есть двумерный массив static void Main() { int m1; m1 = new int; ... Создал новую функцию и хочу...

Как передать функции через метод класса
Добрый вечер всем! Столкнулся с проблемкой К примеру у меня есть 3 функции.Я хочу в 4 функцию дать массив названий этих 3...

Как передать указатель на функцию через метод класса ?
typedef void (*FuncCallback)(float* flValue); Пробовал по всякому и ни как: Class.CallFunc // error C3867: CClass::CallFunc :...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
Контроль уникальности заводского номера - вариант №2
Maks 24.03.2026
В отличие от предыдущего варианта добавлено прерывание циклов, также добавлены новые переменные для сохранения контекста ошибки перед прерыванием цикла: Процедура ПередЗаписью(Отказ, РежимЗаписи,. . .
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-text-sdl3-c. zip finish-text-sdl3-cpp. zip
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло. Но на выплатах по больничным это. . .
Контроль уникальности заводского номера - вариант №1
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере документа выдачи шин для спецтехники с табличной частью. Данные берутся из регистра сведений, по которому настроено. . .
Хочу заставить корпорации вкладываться в здоровье сотрудников: делаю мат модель здравосохранения
anaschu 22.03.2026
e7EYtONaj8Y Z4Tv2zpXVVo https:/ / github. com/ shumilovas/ med2. git
Программный отбор элементов справочника по группе
Maks 22.03.2026
Установка программного отбора элементов справочника "Номенклатура" из модуля формы документа. В качестве фильтра для отбора справочника служит группа номенклатуры. Отбор по наименованию группы. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru