2009-09-14 19 views
110

Y at-il un moyen (juste par curiosité parce que je suis tombé sur plusieurs affectations de même valeur à plusieurs variables aujourd'hui) en C# pour attribuer une valeur à plusieurs variables à la fois dans un déclarations uniques?C#: Attribuer la même valeur à plusieurs variables dans une seule instruction

Quelque chose le long de ces lignes (pseudo-code):

int num1 = 1; 
int num2 = 1; 

num1 & num2 = 5; 

Probablement pas, mais je pensais qu'il était bon de se demander si quelque chose de semblable est en fait possible!

Répondre

189

Il est aussi simple que:

num1 = num2 = 5; 

Lorsque vous utilisez une propriété d'objet au lieu de la variable, il est intéressant de savoir que l'accesseur get de la valeur intermédiaire est pas appelée. Seul l'accesseur set est appelé pour toutes les propriétés accédées dans la séquence d'affectation. Prenez par exemple une classe qui écrit sur la console à chaque appel de l'accesseur get et set.

static void Main(string[] args) 
{ 
    var accessorSource = new AccessorTest(5); 
    var accessor1 = new AccessorTest(); 
    var accessor2 = new AccessorTest(); 

    accessor1.Value = accessor2.Value = accessorSource.Value; 

    Console.ReadLine(); 
} 

public class AccessorTest 
{ 
    public AccessorTest(int value = default(int)) 
    { 
     _Value = value; 
    } 

    private int _Value; 

    public int Value 
    { 
     get 
     { 
      Console.WriteLine("AccessorTest.Value.get {0}", _Value); 
      return _Value; 
     } 
     set 
     { 
      Console.WriteLine("AccessorTest.Value.set {0}", value); 
      _Value = value; 
     } 
    } 
} 

Affichera

AccessorTest.Value.get 5 
AccessorTest.Value.set 5 
AccessorTest.Value.set 5 

Ce qui signifie que le compilateur attribue la valeur à toutes les propriétés et il ne sera pas relire la valeur à chaque fois qu'il est attribué.

+1

Ça a l'air bizarre mais ça marche!Merci;) – Alex

+1

Il suffit de le lire comme il semble: num1 est égal à num2 ce qui équivaut à 5 –

+25

Ce n'est pas étrange en fait. La logique est la suivante: L'opération d'affectation elle-même renvoie une valeur, qui est la valeur qui a été affectée. La séquence d'exécution est: '' num1 = (num2 = 5) '' et la première affectation qui est exécutée ('' num2 = 5'') renvoie la valeur 5 au monde extérieur - qui est à son tour assigné à num1. Cela fonctionne à l'infini ('' num0 = num1 = num2 = 5''). – Jpsy

5
int num1, num2, num3; 

num1 = num2 = num3 = 5; 

Console.WriteLine(num1 + "=" + num2 + "=" + num3); // 5=5=5 
5

Quelque chose comme ça.

num1 = num2 = 5 
11

Essayez ceci:

num1 = num2 = 5; 

Notez que cela ne fonctionnera pas en VB.

+1

Savez-vous s'il existe une syntaxe alternative pour les développeurs VB, ou l'assignation multiple n'est-elle pas simplement disponible dans VB? – ckittel

+3

@cki: AFAIK, ce n'est pas pris en charge. – SLaks

+0

@ckittel Dans VB '=' est utilisé à la fois pour l'assignation et l'égalité, donc 'num1 = num2 = 5' signifierait" assigner le résultat booléen de savoir si cinq est égal à 'num2' à la variable' num1' ". Parce que l'opérateur '=' a ces deux significations, il n'y a aucun moyen de représenter cette syntaxe. Le mieux que vous puissiez faire est de créer une fonction qui prenne en compte un certain nombre de paramètres 'byref' ainsi qu'une valeur et affecte tous les paramètres à cette valeur. – Servy

4

Votre exemple serait:

int num1 = 1; 
int num2 = 1; 

num1 = num2 = 5; 
40

Cela ne voulez que vous voulez:

int num1, num2; 
num1 = num2 = 5; 
cession

'num2 = 5' renvoie la valeur attribuée.

Ceci vous permet de faire des choses folles comme num1 = (num2 = 5) +3; qui affectera 8 à num1, bien que je ne vous ai pas recommandé de le faire comme étant pas très lisible.

24
int num1=5,num2=5 

Déclarer et affecter des variables dans la même instruction.

+0

C'est ma façon préférée. À mon avis, c'est le plus lisible. –

+0

Est-ce une seule déclaration ou deux déclarations? –

3

Quelque chose d'un peu plus court dans la syntaxe, mais en prenant ce que les autres ont déjà déclaré.

int num1, num2 = num1 = 1; 
0

C'est simple.

int num1,num2; 
num1 = num2 = 5; 
Questions connexes