2009-09-14 14 views
110

C'è un modo (solo per curiosità perché ho trovato più assegnazioni dello stesso valore a più variabili oggi) in C# per assegnare un valore a più variabili contemporaneamente in un dichiarazioni singole?C#: Assegna lo stesso valore a più variabili nell'istruzione singola

Qualcosa in questo senso (pseudocodice):

int num1 = 1; 
int num2 = 1; 

num1 & num2 = 5; 
non

Probabilmente, ma ho pensato che valeva la pena di chiedere nel caso in cui qualcosa di simile è effettivamente possibile!

risposta

189

È semplice come:

num1 = num2 = 5; 

Quando si utilizza una proprietà dell'oggetto anziché variabile, è interessante sapere che il get di accesso del valore intermedio non viene chiamato. Solo l'accessor set viene richiamato per tutte le proprietà a cui si accede nella sequenza di assegnazione.

Prendere ad esempio una classe che scrive sulla console ogni volta che vengono richiamati gli accessor get e 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; 
     } 
    } 
} 

Questa volontà uscita

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

che significa che il compilatore assegna il valore di tutte le proprietà e non sarà riletto il valore ogni volta che viene assegnato.

+1

Sembra strano ma funziona!Grazie;) – Alex

+1

Basta leggerlo come appare: num1 è uguale a num2 che equivale a 5 –

+25

In realtà non è strano. La logica è la seguente: L'operazione di assegnazione stessa restituisce un valore, che è il valore che è stato assegnato. La sequenza di esecuzione è: '' num1 = (num2 = 5) '' e il primo compito che viene eseguito ('' num2 = 5'') restituisce il valore 5 al mondo esterno - che a sua volta è assegnato a num1. Funziona ad infinitum ('' num0 = num1 = num2 = 5''). – Jpsy

5
int num1, num2, num3; 

num1 = num2 = num3 = 5; 

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

Qualcosa di simile.

num1 = num2 = 5 
11

Prova questo:

num1 = num2 = 5; 

Si noti che questo non funzionerà in VB.

+1

Sai se esiste una sintassi alternativa per gli sviluppatori VB, o è più compito semplicemente non disponibile in VB? – ckittel

+3

@cki: AFAIK, non è supportato. – SLaks

+0

@ckittel In VB '=' è usato sia per l'assegnazione che per l'uguaglianza, quindi 'num1 = num2 = 5' significherebbe" assegna il risultato booleano se cinque è uguale a 'num2' alla variabile' num1' ". Poiché l'operatore '=' ha questi due significati, non c'è modo di rappresentare questa sintassi. Il meglio che si può fare è creare una funzione che includa un certo numero di parametri 'byref' e un valore e assegna tutti i parametri a quel valore. – Servy

4

tuo esempio potrebbe essere:

int num1 = 1; 
int num2 = 1; 

num1 = num2 = 5; 
40

Questo vi voglio che si desidera:

int num1, num2; 
num1 = num2 = 5; 

'num2 = 5' assegnazione restituirà il valore assegnato.

Questo ti permette di fare cose folli come num1 = (num2 = 5) +3; che assegnerà 8 a num1, anche se non lo consiglierei perché non è molto leggibile.

24
int num1=5,num2=5 

Dichiarazione e assegnazione di variabili nella stessa istruzione.

+0

Questo è il mio modo preferito. Secondo me, è il più leggibile. –

+0

È una singola affermazione o due affermazioni? –

3

Qualcosa un po 'più breve nella sintassi ma prendendo ciò che gli altri hanno già dichiarato.

int num1, num2 = num1 = 1; 
0

È semplice.

int num1,num2; 
num1 = num2 = 5; 
Problemi correlati