Как вернуть 2 значения из метода?
Я пробовал с двумя методами, но не получилось вызвать переменные ( вызываются те, что только объявлены, они равны 0 ). Вызывал так :
Могли бы вы, пожалуйста, мне помочь?
- Вопрос задан более трёх лет назад
- 3978 просмотров
Простой 1 комментарий
- Вконтакте


Варианты:
1) Обернуть в структуру/класс и возвращать ее инстанс
2) Использовать out/ref
3) Если ссылочный тип — подавать на вход и модифицировать
Как вернуть несколько значений из функции в C#
![]()
Для того чтобы вернуть несколько значений из функции, нужно объявить необходимые параметры с модификаторами out. Например.
![]()
В версиях C# c 4 по 6 включительно, лучшими вариантами вернуть из функции(метода вернее), являлись возвращение кортежа Tuple<> или создание класса\структуры с нужными свойствами. Вариант с out-параметрами, хуже, т.к. немного выбивается из основных парадигм применяемых при разработке на C#, и был встроен скорее для поддержки импорта нативных функций.
Вернуть несколько значений из метода
Подскажите как вернуть несколько разных переменных из метода, но не в масиве?
Вернуть несколько значений из метода
Добрый день! Подскажите есть метод, который считывает из файла данные int Shirina(StreamReader.
Как вернуть несколько значений
Всем привет! Помогите разобраться : как вернуть несколько значений из функции? public static.
Вернуть несколько значений из функции
Есть функция, которая создает массив, находит минимальный положительный элемент и произведение не.
Вернуть несколько значений из массива функции
Здравствуйте, есть функция (довольно корявая, первый день за C#): public string pinger(string.
Как я могу вернуть несколько значений из функции в C #?
Я прочитал версию С++ этого вопроса, но на самом деле не понял.
Может кто-нибудь объяснить, ясно ли это, и как?
26 ответов
Кортежи с двумя значениями имеют Item1 и Item2 качестве свойств.
Теперь, когда С# 7 выпущен, вы можете использовать новый включенный синтаксис Tuples
который затем можно использовать так:
Вы также можете предоставить имена своим элементам (чтобы они не были «Item1», «Item2» и т.д.). Вы можете сделать это, добавив имя в подпись или методы возврата:
Их также можно деконструировать, что является довольно приятной новой функцией:
Проверьте эту ссылку, чтобы увидеть больше примеров того, что можно сделать 🙂
Вы можете использовать три разных способа
1. параметры ref/out
используя ref:
используя:
2. структура/класс
используя структуру:
используя класс:
3. Кортеж
Класс Tuple
С# 7 кортежей
Вы не можете сделать это на С#. Что вы можете сделать, это иметь параметр out или вернуть свой собственный класс (или структуру, если вы хотите, чтобы он был неизменным).
Использование параметра Использование пользовательского класса (или структуры)
Если вы имеете в виду возврат нескольких значений, вы можете либо вернуть класс /struct, содержащий значения, которые хотите вернуть, либо использовать ключевое слово «out» для своих параметров, например:
Предыдущий плакат прав. Вы не можете вернуть несколько значений из метода С#. Однако у вас есть несколько вариантов:
- Возвращает структуру, содержащую несколько элементов
- Возвращает экземпляр класса
- Используйте выходные параметры (используя ключевые слова out или ref)
- Используйте словарь или пару ключ-значение в качестве вывода
Достоинства и недостатки здесь часто трудно понять. Если вы вернете структуру, убедитесь, что она маленькая, потому что structs — тип значения и передается в стек. Если вы возвращаете экземпляр класса, здесь есть некоторые шаблоны проектирования, которые вы можете использовать, чтобы избежать возникновения проблем — члены классов могут быть изменены, поскольку С# передает объекты по ссылке (у вас нет ByVal, как вы это делали в VB).
Наконец, вы можете использовать выходные параметры, но я бы ограничил использование этого сценариями, когда у вас есть пара (например, 3 или меньше) параметров — в противном случае все становится уродливо и сложно поддерживать. Кроме того, использование выходных параметров может быть ингибитором гибкости, потому что ваша сигнатура метода должна будет меняться каждый раз, когда вам нужно что-то добавить к возвращаемому значению, а при возврате экземпляра структуры или класса вы можете добавлять элементы без изменения сигнатуры метода.
С архитектурной точки зрения я бы рекомендовал не использовать пары ключ-значение или словари. Я считаю, что этот стиль кодирования требует «секретного знания» в коде, который использует этот метод. Он должен заранее знать, какими будут ключи и что означают значения, и если разработчик, работающий над внутренней реализацией, меняет способ создания словаря или KVP, он может легко создать каскад сбоев во всем приложении.