Je viens de regarder une vidéo présentant le les nouvelles fonctionnalités de C# 7 . Entre autres, il introduit la possibilité de retourner un type de tuple (par ex : (int, int)
qui, je crois, est juste un sucre syntaxique pour Tuple<int, int>
). Ainsi, si nous avons une méthode qui renvoie plusieurs valeurs, il y a 3 possibilités en C# sur la façon de le faire :
(int first, int second) ReturnTuple()
{
return (1, 2);
}
int ReturnOutParam(out int second)
{
second = 2;
return 1;
}
CustomObject ReturnObject()
{
return new CustomObject
{
First = 1,
Second = 2
};
}
Je crois qu'il n'y a pas d'autres moyens de le faire - si oui, veuillez me corriger.
Laquelle de ces trois méthodes est la bonne ? Et dans quels cas peut-on utiliser les deux autres ? À chaque nouvelle version de C#, j'ai l'impression qu'il y a un ou deux patrons de conception qui sont devenus obsolètes dans le monde .NET. Certaines fonctionnalités étaient très utiles (comme les génériques, les partiels, LINQ, les lambdas, async/await ou le propagateur de nullité). D'autres sont très situationnelles (dynamique, nameof). Et puis il y a celles qui n'ont tout simplement pas de sens pour moi (auto-initialiseurs de propriétés, valeurs de retour de tuple ou fonctions locales).