2015-08-29 9 views
6

Ich habe eine Frage zu etwas, das ich noch nie in C# gesehen habe. Im Dienstanbieter in der neuen asp.net-Abhängigkeitsinjektion gibt es eine Methode mit "return _ => null;"Was ist die Rückkehr _ in C#

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

Verfahren in Frage:

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

Was ist der _. Ist es neu in C# 6? Die Suche nach Rückgabe _ liefert nichts Nützliches, außer Sie möchten Konventionen für die Namensgebung treffen.

+0

Es ist der Name des Arguments zu Ihrem Func –

+1

Wie 'return delegate (int _) {return null; }; 'where' _' ist ein Parameter, der nicht verwendet wird (es ist also nicht notwendig, einen Eigennamen anzugeben). – Eser

Antwort

6

Wenn Sie den Parameter nicht in einem Lambda verwenden, verwenden die Benutzer _ als Konvention, um dies anzuzeigen.

In Ihrem Code ist es der Catchall-Fall für, wenn serviceType nicht zu einer Aufruf-Site aufgelöst wird. Da Sie sich nicht darum kümmern, dass serviceType null zurückgibt, wird _ für diesen Parameter verwendet.

Dies ist wahrscheinlich ein Duplikat dieser Stelle, die viele Informationen hat:

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

+0

Danke für den Link mit mehr Details. Es macht jetzt Sinn, nur ein variabler Name. Ich dachte, es hätte eine besondere Bedeutung, weil ich zum ersten Mal eine Unterstreichung gesehen habe, die so verwendet wurde. –

2

_ ist eine gültige C# Kennung, so _ => null ist die gleiche wie myServiceProvider => null

definieren, was eine gültige Bezeichner ist nicht so einfach wie das Überprüfen der Zeichen für eine weiße Liste erlaubter Zeichen, aber es ist dokumentiert here