Метод должен возвращать несколько значений - PullRequest
6 голосов
/ 27 мая 2010

Hii

У меня есть метод в C #, я должен вернуть несколько значений из этого метода без использования коллекций, таких как массивы. Есть ли надежный способ?

Ответы [ 7 ]

15 голосов
/ 27 мая 2010

Да, ключевое слово out:

public void ReturnManyInts(out int int1, out int int2, out int int3)
{
    int1 = 10;
    int2 = 20;
    int3 = 30;
}

тогда назовите это так:

int i1, i2, i3;
ReturnManyInts(out i1, out i2, out i3);

Console.WriteLine(i1);
Console.WriteLine(i2);
Console.WriteLine(i3);

который выводит:

10
20
30

EDIT:

Я вижу, что многие посты предлагают создать для этого свой собственный класс. Это не обязательно, так как .net предоставляет вам класс, чтобы делать то, что они уже говорят. Класс Tuple.

public Tuple<int, string, char> ReturnMany()
{
    return new Tuple<int, string, char>(1, "some string", 'B');
}

тогда вы можете получить его так:

var myTuple = ReturnMany();
myTuple.Item1 ...
myTuple.Item2 ...

существуют общие перегрузки, поэтому в кортеже может быть до 8 уникальных типов.

10 голосов
/ 27 мая 2010

Ну, вы можете использовать:

  • пользовательский класс / структура / тип, содержащий все ваши значения
  • out Параметры

т.е:.

class MyValues
{
    public string Val1 { get; set; }
    public int Val2 {get; set; }
}

public MyValues ReturnMyValues();

или

public void ReturnMyValues(out string Val1, out int Val2);
5 голосов
/ 27 мая 2010

Если вы используете .NET 4.0, вы можете использовать один из универсальных классов Tuple для возврата нескольких значений из вызова метода. Статический класс Tuple предоставляет методы для создания объектов Tuple. Таким образом, вам не нужно определять свой собственный тип возврата для метода.

public Tuple<string,int> Execute()
{
  return new Tuple<string,int>("Hello World", 2);
}
2 голосов
/ 27 мая 2010

Почему использование 'out' ненадежно? (Или ты сделал опечатку и имел ввиду без?)

Есть несколько методов:

  • Возвращает объект, который содержит несколько значения (структура / класс и т. д.)
  • из
  • исх
2 голосов
/ 27 мая 2010

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

public MyType MyMethod() 
{
    return new MyType
    {
        Prop1 = "foo",
        Prop2 = "bar"
    };
}
0 голосов
/ 27 мая 2010
public int Method Name(out string stringValue, out int intValue)
{
    ///
          Method goes here
    ///

    return intVaraible
}

здесь вы получите 3 возвращаемых значения 1. stringValue 2. intValue 3. intVariable

0 голосов
/ 27 мая 2010

Класс дескриптора или структура. Вы должны поместить это куда-нибудь, так как логично, что метод должен возвращать только одно значение. В качестве альтернативы вы можете использовать out или ref, но я бы вернул класс.

Кстати, что вас удерживает, чтобы вы не использовали коллекции?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...