Szukaj…


Uwagi

W języku C # nie ma nieodłącznej odpowiedzi na tę - tak zwaną - potrzebę. Niemniej jednak istnieją obejścia tego problemu.

Powodem, dla którego kwalifikuję tę potrzebę jako „tak zwaną”, jest to, że potrzebujemy tylko metod z 2 lub więcej niż 2 wartościami, aby powrócić, gdy naruszymy dobre zasady programowania. Zwłaszcza zasada pojedynczej odpowiedzialności .

Dlatego lepiej byłoby być ostrzeżonym, gdy potrzebujemy funkcji zwracających 2 lub więcej wartości i ulepszyć nasz projekt.

rozwiązanie „obiekt anonimowy” + „dynamiczne słowo kluczowe”

Możesz zwrócić anonimowy obiekt ze swojej funkcji

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

I przypisz wynik do obiektu dynamicznego i odczytaj w nim wartości.

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

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

Rozwiązanie krotkowe

Możesz zwrócić instancję klasy Tuple z funkcji za pomocą dwóch parametrów szablonu, takich jak Tuple<string, MyClass> :

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

I przeczytaj poniższe wartości:

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

Parametry Ref i Out

ref kluczowe ref służy do przekazywania argumentu jako odwołania . out zrobi to samo co ref ale nie wymaga przypisanej wartości przez wywołującego przed wywołaniem funkcji.

Ref Parametr : -Jeśli chcesz przekazać zmienną jako parametr ref, musisz ją zainicjować przed przekazaniem jej jako parametru ref do metody.

Out Parameter: - Jeśli chcesz przekazać zmienną jako parametr out, nie musisz jej inicjalizować przed przekazaniem jej jako parametru out do metody.

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
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow