Perl ha la capacità di fare:Come assegnare ad un elenco di variabili in una dichiarazione
my ($a,$b,$c,$d) = foo();
dove foo
restituisce 4 variabili, in contrasto con l'assegnazione di uno alla volta. C'è qualcosa di simile in C#?
Perl ha la capacità di fare:Come assegnare ad un elenco di variabili in una dichiarazione
my ($a,$b,$c,$d) = foo();
dove foo
restituisce 4 variabili, in contrasto con l'assegnazione di uno alla volta. C'è qualcosa di simile in C#?
No, fondamentalmente. Opzioni:
object[] values = foo();
int a = (int)values[0];
string b = (string)values[1];
// etc
o:
var result = foo();
// then access result.Something, result.SomethingElse etc
o:
int a;
string b;
float c; // using different types to show worst case
var d = foo(out a, out b, out c); // THIS WILL CONFUSE PEOPLE and is not a
// recommendation
@lazyberezovsky alla fine tutte queste cose sono modi per esprimere più valori in uscita da una funzione e assegnarli ai residenti al chiamante; il meccanismo * per quello (elenchi, ecc.) è i dettagli di implementazione –
ottenuto grazie mille! – user2521358
Se si enumerano opzioni errate, suppongo che si possa includere anche una 'Tupla
Per le funzioni è necessario restituire o 1 oggetto o void
. Ma puoi affrontare questo problema in diversi modi.
struct
o un class
che conterrà a,b,c,d
e restituire che, come ad esempio la funzione I dati data foo()
conterranno a, b, c, dout
nel parametro della propria funzione, ad es. foo (out a, out b, out c, out d), ma i tuoi input variabili dovranno essere inizializzati. Maggiori informazioni qui. Vedi http://msdn.microsoft.com/en-us/library/t3c3bfhx(v=vs.80).aspxref
che è simile a out. Si veda http://msdn.microsoft.com/en-US/library/14akc2c7(v=vs.80).aspxarrray
o un list
come un altro membro ha sottolineatoRicordo anche a seconda sul tipo che stai passando a strcut, gli oggetti che valuti possono essere passati come Value
o Reference
. Vedere http://msdn.microsoft.com/en-us/library/0f66670z(v=vs.71).aspx
Ad 4. Matrice, lista o (preferibilmente) un 'IEnumerable' –
Tuple
può essere un costrutto utile per questo.
public Tuple<int, string, double> Foo() { ... }
allora si può fare:
var result = Foo();
int a = result.Item1;
string b = result.Item2;
double c = result.Item3;
Questo è un retaggio della crescente influenza degli stili di programmazione funzionali su C#: la tupla è un costrutto fondamentale in molti linguaggi funzionali, e assiste notevolmente nella loro tipizzazione statica.
perché non fare una lezione per questo? –
AFAIK no, ma come @ 491243 ha detto che è possibile utilizzare la classe – wudzik
Solo interessante - quando questa funzione può essere utile? –