Возврат нескольких значений вызывающему методу - PullRequest
358 голосов
/ 14 апреля 2009

Я прочитал C ++ версию этого вопроса , но не совсем понял.

Может кто-нибудь объяснить, понятно, можно ли это сделать и как?

Ответы [ 26 ]

2 голосов
/ 21 ноября 2014

Просто используйте в ООП класс, подобный этому:

class div
{
    public int remainder;

    public int quotient(int dividend, int divisor)
    {
        remainder = ...;
        return ...;
    }
}

Член функции возвращает частное, которое в первую очередь интересует большинство вызывающих абонентов. Кроме того, он сохраняет остаток как элемент данных, который впоследствии легко доступен вызывающему абоненту.

Таким образом, вы можете иметь много дополнительных «возвращаемых значений», что очень полезно, если вы реализуете вызовы из базы данных или сети, где может потребоваться множество сообщений об ошибках, но только в случае возникновения ошибки.

Я также ввел это решение в вопрос C ++, на который ссылается OP.

1 голос
/ 28 августа 2015

Способы сделать это:

1) KeyValuePair (лучшая производительность - 0,32 нс):

    KeyValuePair<int, int> Location(int p_1, int p_2, int p_3, int p_4)
    {                 
         return new KeyValuePair<int,int>(p_2 - p_1, p_4-p_3);
    }

2) Кортеж - 5,40 нс:

    Tuple<int, int> Location(int p_1, int p_2, int p_3, int p_4)
    {
          return new Tuple<int, int>(p_2 - p_1, p_4-p_3);
    }

3) из (1,64 нс) или ref 4) Создайте свой собственный класс / struct

нс -> наносекунды

Ссылка: множественные возвращаемые значения .

1 голос
/ 28 июня 2016

Будущая версия C # будет включать именованные кортежи. Посмотрите эту сессию Channel9 для демонстрации https://channel9.msdn.com/Events/Build/2016/B889

Перейдите к 13:00 для записи кортежей. Это позволит такие вещи, как:

(int sum, int count) Tally(IEnumerable<int> list)
{
// calculate stuff here
return (0,0)
}

int resultsum = Tally(numbers).sum

(неполный пример из видео)

0 голосов
/ 25 сентября 2018

Сегодня программистам нужно время и непростительные методы. Простое, рабочее и быстрое решение:

private int[] SumAndSub(int A, int B)
{
    return new[] { A + B , A - B };
}

Использование где-то;

var results = SumAndSub(20, 5);
int sum = results[0];
int sub = results[0];
0 голосов
/ 16 августа 2013

вы можете попробовать это

public IEnumerable<string> Get()
 {
     return new string[] { "value1", "value2" };
 }
0 голосов
/ 13 сентября 2016

Вы также можете использовать OperationResult

public OperationResult DoesSomething(int number1, int number2)
{
// Your Code
var returnValue1 = "return Value 1";
var returnValue2 = "return Value 2";

var operationResult = new OperationResult(returnValue1, returnValue2);
return operationResult;
}
...