C# Language
Funktion med flera returvärden
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;
}