Sök…


Anmärkningar

Det finns inget inneboende svar i C # på detta - så kallade - behov. Det finns dock lösningar för att tillgodose detta behov.

Anledningen till att jag betecknar behovet som "så kallad" är att vi bara behöver metoder med 2 eller mer än 2 värden för att återvända när vi bryter mot bra programmeringsprinciper. Särskilt principen om ett enda ansvar .

Därför skulle det vara bättre att bli varnade när vi behöver funktioner som returnerar 2 eller fler värden och förbättra vår design.

"anonymt objekt" + "dynamiskt nyckelord" -lösning

Du kan returnera ett anonymt objekt från din funktion

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

Och tilldela resultatet till ett dynamiskt objekt och läs värdena i det.

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

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

Tuple-lösning

Du kan returnera en instans av Tuple klassen från din funktion med två Tuple<string, MyClass> som Tuple<string, MyClass> :

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

Och läs värdena som nedan:

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

Ref och Parametrar

ref nyckelordet används för att skicka ett argument som referens . out kommer att göra samma sak som ref men det kräver inte ett tilldelat värde av den som ringer innan han ringer till funktionen.

Ref-parameter : -Om du vill skicka en variabel som ref-parameter måste du initiera den innan du skickar den som ref-parameter till metod.

Ut-parameter: - Om du vill skicka en variabel som ut-parameter behöver du inte initiera den innan du skickar den som ut-parameter till metod.

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
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow