2011-01-19 6 views
27

Supponiamo di avere una funzione con il parametro out, tuttavia non ho bisogno del suo valore. C'è un modo per passare nessun parametro reale se il risultato dato sarà comunque buttato via?C'è un modo per omettere i parametri?

EDIT:

Anche se la questione è stata votata ad essere vittima di Optional Output Parameters è solo se si guarda dal punto di vista del metodo del creatore. Se sei l'utente del metodo, ti interessa non rendere il parametro opzionale, ma non utilizzarlo senza dichiarare la variabile. E mentre questo non è possibile, con C# 7.0 è possibile dichiararlo nella chiamata di metodo. Così, invece di:

int unusedValue; 
TryGetValue("key", out unusedValue); 

si ottiene:

TryGetValue("key", out int unusedValue); 

o anche:

TryGetValue("key", out _); 

Questo dovrebbe essere aggiunto come una risposta, ma:

  • posso' lo faccio per questa domanda, perché è stato contrassegnato come un dupe;
  • la domanda questa domanda è sembrata come un dupes di effettivamente chiede una cosa diversa.
+5

no no no no no – Andrey

risposta

22

Non è possibile farlo, ma non esiste una regola che dica che è necessario utilizzare il valore restituito. Puoi semplicemente passare una variabile temporanea che non usi più.

C# 4.0 consente parametri facoltativi, ma i parametri out non possono essere facoltativi.

EDIT: BTW, è anche possibile sovraccaricare il metodo:

int DoStuff() 
{ 
    int temp; 
    return DoStuff(out temp); 
} 

int DoStuff(out outParam) 
{ 
    //... 
} 
+0

Beh, so che non devo usarlo. Mi piacerebbe anche non passare alcuna variabile. Comunque questa è la risposta, grazie. –

7

Mentre non si può effettivamente rendere il parametro fuori opzionale, si può semplicemente creare un sovraccarico per la funzione senza il parametro fuori, che quindi toglierebbe la necessità di creare una variabile temporanea.

public void DoSomething(int param1, out int param2) 
{ 
    /* Method work here */ 
} 

public void DoSomething(int param1) 
{ 
    int temp; 
    DoSomething(param1, out temp); 
} 
+0

Questa risposta è più funzionale. Non è necessario modificare in seguito se si desidera utilizzarlo o non utilizzarlo più. – elcool

+0

E se non si possiede il metodo che si sta chiamando, è possibile creare un metodo di estensione per manichino i parametri out per voi. –

0

Non sono sicuro di C#, ma in VB.Net è possibile passare semplicemente un parametro costante a un output (byref). Quindi se hai un intero, come parametro di output, non devi passare una variabile reale, puoi semplicemente passare 0, o qualsiasi altro intero valido. Per gli oggetti, comprese le stringhe, è sufficiente passare Nothing (Null in C#) e tutto funziona correttamente. Non sono sicuro di dove sia memorizzata la variabile, probabilmente solo in pila come in qualsiasi altro parametro che passi, e scompare quando la funzione termina.

+0

Ho provato, purtroppo non ha funzionato. 'errore CS1510: un argomento ref o out deve essere una variabile assegnabile'. – MasterMastic