Поиск…


замечания

В C # нет неотъемлемого ответа на этот вопрос - так называемый - нужен. Тем не менее есть обходные пути для удовлетворения этой потребности.

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

Следовательно, было бы лучше получить предупреждение, когда нам нужны функции, возвращающие 2 или более значения, и улучшаем наш дизайн.

«анонимный объект» + «динамическое ключевое слово»

Вы можете вернуть анонимный объект из своей функции

public static object FunctionWithUnknowReturnValues ()
{
    /// anonymous object
    return new { a = 1, b = 2 };
}

И присвойте результат динамическому объекту и прочитайте значения в нем.

/// dynamic object
dynamic x = FunctionWithUnknowReturnValues();

Console.WriteLine(x.a);
Console.WriteLine(x.b);

Решение для кортежа

Вы можете вернуть экземпляр класса Tuple из вашей функции с двумя параметрами шаблона в виде Tuple<string, MyClass> :

public Tuple<string, MyClass> FunctionWith2ReturnValues ()
{
    return Tuple.Create("abc", new MyClass());
}

И прочитайте значения, как показано ниже:

Console.WriteLine(x.Item1);
Console.WriteLine(x.Item2);

Параметры обратной связи и выхода

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

Ref Parameter : -Если вы хотите передать переменную как параметр ref, вам необходимо инициализировать ее, прежде чем передавать ее как параметр ref в метод.

Out Parameter: - Если вы хотите передать переменную как параметр out, вам не нужно ее инициализировать, прежде чем передавать ее как параметр out в метод.

static void Main(string[] args)
{
    int a = 2;
    int b = 3;
    int add = 0;
    int mult= 0;
    AddOrMult(a, b, ref add, ref mult); //AddOrMult(a, b, out add, out mult);
    Console.WriteLine(add); //5
    Console.WriteLine(mult); //6
}

private static void AddOrMult(int a, int b, ref int add, ref int mult) //AddOrMult(int a, int b, out int add, out int mult)
{
    add = a + b;
    mult = a * b;
}


Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow