Zoeken…


Opmerkingen

Er is geen inherent antwoord in C # op deze - zogenaamde - behoefte. Er zijn echter oplossingen om aan deze behoefte te voldoen.

De reden dat ik de behoefte kwalificeer als "zo genoemd" is dat we alleen methoden met 2 of meer dan 2 waarden nodig hebben om terug te keren als we goede programmeerprincipes overtreden. Vooral het principe van een enkele verantwoordelijkheid .

Daarom is het beter om gewaarschuwd te worden wanneer we functies nodig hebben die twee of meer waarden retourneren, en ons ontwerp te verbeteren.

"anoniem object" + "dynamische trefwoord" oplossing

U kunt vanuit uw functie een anoniem object retourneren

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

En wijs het resultaat toe aan een dynamisch object en lees de waarden erin.

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

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

Tuple-oplossing

U kunt vanuit uw functie een instantie van de klasse Tuple met twee sjabloonparameters als Tuple<string, MyClass> :

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

En lees de waarden zoals hieronder:

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

Ref en Out-parameters

Het trefwoord ref wordt gebruikt om een argument als referentie door te geven . out doet hetzelfde als ref maar er is geen door de beller toegewezen waarde vereist voordat de functie wordt opgeroepen.

Ref-parameter : -Als u een variabele als ref-parameter wilt doorgeven, moet u deze initialiseren voordat u deze als ref-parameter aan methode doorgeeft.

Parameter Out: - Als u een variabele wilt doorgeven als parameter out, hoeft u deze niet te initialiseren voordat u deze als parameter out to method doorgeeft.

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
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow