2015-08-29 26 views
6

Ho una domanda su qualcosa che non ho mai visto prima in C#. Nel fornitore di servizi nella nuova iniezione delle dipendenze asp.net, esiste un metodo con "return _ => null;"Qual è il ritorno _ in C#

https://github.com/aspnet/DependencyInjection/blob/dev/src/Microsoft.Framework.DependencyInjection/ServiceProvider.cs Righe 63-72.

Il metodo in questione:

private Func<MyServiceProvider, object> CreateServiceAccessor(Type serviceType) 
{ 
    var callSite = GetServiceCallSite(serviceType, new HashSet<Type>()); 
    if (callSite != null) 
    { 
     return RealizeService(_table, serviceType, callSite); 
    } 
    return _ => null; 
} 

Qual è il _. È nuovo in C# 6? La ricerca di return _ non restituisce nulla di utile, a meno che non si vogliano le convenzioni di denominazione.

+0

È il nome dell'argomento sul tuo Func –

+1

Come 'return delegate (int _) {return null; }; 'dove' _' è un parametro che non viene utilizzato (quindi non è necessario fornire un nome appropriato). – Eser

risposta

6

Se non si utilizza il parametro in una lambda, le persone usano _ come convenzione per indicare che.

Nel codice, è il caso catchall se serviceType non viene risolto in un sito di chiamata. Poiché non ti interessa il serviceType per restituire null, viene utilizzato _ per tale parametro.

Questo è probabilmente un duplicato di questo post, che ha un sacco di informazioni:

C# style: Lambdas, _ => or x =>?

+0

Grazie per il collegamento con ulteriori dettagli. Ha senso ora, solo un nome variabile. Pensavo che avesse un significato speciale perché è la prima volta che vedo un segno di sottolineatura usato da solo in quel modo. –

2

_ è un C# identificatore valido, quindi _ => null è lo stesso di myServiceProvider => null

definire cosa è una valida l'identificatore non è semplice come controllare i caratteri per una lista bianca di caratteri consentiti, ma è documentato here

Problemi correlati