Come menzionato da @ChaosPandion, in quel caso specifico restituiresti una struttura DateTime
.
In generale, tuttavia, si avrebbe le seguenti opzioni:
Utilizzando out
parametri
Questo è un modo semplice che di solito funziona sempre. Tuttavia, è un po 'goffo, in quanto il risultato viene restituito dove normalmente ci si aspetterebbe che gli argomenti della funzione vengano passati e che la firma del metodo possa essere lunga e difficile da ridefinire.
public void GetTime(out int hr, out int min)
{
DateTime dt = DateTime.Now;
hr = dt.Hour;
min = dt.Minute;
}
static void Main(string[] args)
{
// declare variables for out parameters first
int hour, minute;
GetTime(out hour, out minute);
}
Utilizzando una matrice
Questo è un metodo semplice che funziona bene se i valori del reso hanno lo stesso tipo.
public int[] GetTime()
{
DateTime dt = DateTime.Now;
return new[] { dt.Hour, dt.Minute};
}
Utilizzando un elenco di proprietà (Un sacchetto struttura è una semplice classe che ha solo proprietà)
Questo è molto comodo e consente una facile modifica del tipo e del numero di valori restituiti in seguito senza cambiare la firma del metodo.
class A
{
int Prop1 { get; set; }
int Prop2 { get; set; }
}
public A SomeMethod()
{
return new A() { Prop1 = 1, Prop2 = 2 }
}
Utilizzando una tupla
In C# 4.0 (richiede VS 2010) è possibile utilizzare la classe Tuple<T1, T2, ...>
:
public Tuple<int, int> GetTime()
{
DateTime dt = DateTime.Now;
return Tuple.Create(dt.Hour, dt.Minute);
}
C# 7.0 tuple
C# 7.0 aggiunge supporto per più valori di ritorno. È possibile scrivere codice come questo per restituire una tupla implicitamente creato:
(string, string, string) LookupName(long id) // tuple return type
{
... // retrieve first, middle and last from data storage
return (first, middle, last); // tuple literal
}
Gli elementi tuple sono nomi Item1
, Item2
, ecc per impostazione predefinita, ma è anche possibile specificare i nomi, per esempio
(string first, string middle, string last) LookupName(long id) // tuple return type
{
... // retrieve first, middle and last from data storage
return (first, middle, last); // tuple literal
}
e poi accedere agli elementi tuple via quei nomi:
var names = LookupName(id);
WriteLine($"found {names.first} {names.last}.");
risposta breve: NO, è possibile restituire più valori in array, elenco, dizionario o qualsiasi raccolta –
Perché non si memorizza 'DateTime.Now' su' mc' e si utilizzano le sue proprietà? – BrunoLM
possibile duplicato di [Come posso restituire più valori da una funzione in C#?] (Http://stackoverflow.com/questions/748062/how-can-i-return-multiple-values-from-a-function-in -c) – nawfal