94 votes

Quelle exigence était le tuple destiné à résoudre ?

Je suis à la recherche à la nouvelle fonction c# de tuples. Je suis curieux de savoir, quel problème était le tuple destiné à résoudre ?

Qu’avez-vous utilisé tuples pour vos applications ?

Mise à jour

Merci pour les réponses à ce jour, permettez-moi de voir si j’ai des choses directement dans mon esprit. Un bon exemple d’un tuple a été souligné comme coordonnées. Cela semble bon ?

Puis utiliser le tuple comme suit :

Est-ce exact ?

117voto

Eric Lippert Points 300275

Lors de l'écriture des programmes, il est très courant d'logiquement regrouper un ensemble de valeurs qui n'ont pas suffisamment de points communs pour justifier une classe.

De nombreux langages de programmation vous permettent logiquement d'regrouper un ensemble d'autres sans valeurs, sans la création d'un type dans un seul sens:

void M(int foo, string bar, double blah)

Logiquement c'est exactement le même que la méthode M qui prend un argument qui est un 3-tuple de type int, string, double. Mais j'espère que vous ne pas faire:

class MArguments
{
   public int Foo { get; private set; } 
   ... etc

sauf MArguments a une autre signification dans la logique d'affaires.

Le concept de "groupe ensemble un tas de données non liées dans une structure qui est plus légère qu'une classe" est utile que dans de très nombreux endroits, et pas seulement formelle des listes de paramètres de méthodes. C'est utile lorsqu'une méthode a deux choses à ce retour, ou lorsque vous voulez clés d'un dictionnaire de données deux plutôt qu'un seul, et ainsi de suite.

Langues comme F# qui soutiennent tuple types nativement fournir beaucoup plus de souplesse à leurs utilisateurs; ils sont un outil très utile de définir des types de données. La BCL équipe a choisi de travailler avec l'équipe F# standardiser sur un tuple de type pour le cadre, pour que toutes les langues pourraient en profiter.

Cependant, il n'existe pas de langue de soutien pour les tuples en C#. Les Tuples sont juste un autre type de données comme n'importe quel autre cadre de la classe; il n'y a rien de spécial à leur sujet. Nous envisageons d'ajouter un meilleur soutien pour les n-uplets dans hypothétiques futures versions de C#. Si quelqu'un a des idées sur ce genre de fonctions impliquant des tuples vous aimeriez voir, je serais heureux de les transmettre à l'équipe de conception. Des scénarios réalistes sont plus convaincants que ceux de réflexions théoriques.

22voto

Evan Plaice Points 5677

Les Tuples de fournir une immuable de la mise en œuvre d'une collection

Outre les utilisations courantes de tuples:

  • pour le groupe de valeurs communes ensemble sans avoir à créer une classe
  • pour retourner plusieurs valeurs à partir d'une fonction/méthode
  • etc...

Des objets immuables sont intrinsèquement thread-safe:

Des objets immuables peut être utile dans des applications multi-thread. Plusieurs threads peuvent agir sur les données représentées par des objets immuables, sans souci de données modifiées par d'autres threads. Des objets immuables sont donc considérés comme plus "thread-safe" que mutable objets.

De "Immuable Objet" sur wikipedia

12voto

Toby Points 4112

Il fournit une alternative à ou si vous avez une méthode qui doit retourner plusieurs nouveaux objets dans le cadre de sa réponse.

Il permet également d’utiliser un type intégré comme type de retour si tout ce que vous devez faire est mash up deux ou trois types existants, et vous ne voulez pas d’avoir à ajouter un class/struct juste pour cette combinaison. (Jamais souhaité qu'une fonction peut retourner un type anonyme ? Il s’agit d’une réponse partielle à cette situation.)

10voto

Stephen Cleary Points 91731

Il est souvent utile d’avoir un type de « paire », juste utilisé dans des situations rapides (comme les deux valeurs de retour d’une méthode). Tuples sont un élément central des langages fonctionnels comme F # et c# ramassé le long du chemin.

5voto

Keith Nicholas Points 20875

très utile pour renvoyer deux valeurs d'une fonction

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X