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

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

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

Author24 — интернет-сервис помощи студентам
Не могу передать массив в метод(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)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.09.2019, 12:40
Ответы с готовыми решениями:

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

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

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

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

2
Модератор
Эксперт .NET
15844 / 10992 / 2852
Регистрация: 21.04.2018
Сообщений: 32,250
Записей в блоге: 2
14.09.2019, 12:50 2
Лучший ответ Сообщение было отмечено 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  [ТС] 3
Я думал, что, если массив хранит значимые типы, то и он будет значимым, теперь я понял, спасибо большое.
0
14.09.2019, 13:06
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.09.2019, 13:06
Помогаю со студенческими работами здесь

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

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

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

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


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

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