Wenn Sie anfangen, sich mit C# auseinanderzusetzen oder Ihre Kenntnisse zu erweitern, sollten Sie diese nützlichen Sprachfunktionen erlernen. Dies wird Ihnen helfen, Ihren Code zu vereinfachen, Fehler zu vermeiden und viel Zeit zu sparen.
1) async/await
Die Verwendung des async/await-pattern ermöglicht es, die Benutzeroberfläche/den aktuellen Thread zu entsperren, während Blockierungsvorgänge ausgeführt werden. Das Async/Await-Muster funktioniert, indem es zulässt, dass Code auch dann weiter ausgeführt wird, wenn etwas die Ausführung blockiert (z. B. eine Webanfrage).
2) Objekt-/Array-/Sammlungsinitialisierer
Erstellen Sie ganz einfach Klassen, Arrays und Sammlungen mithilfe von Objekt-, Array- und Sammlungsinitialisierern. Beispiel:
//Einige Demonstrationsklassen publicclassEmployee{ publicstringName { get; set;} publicDateTime StartDate { get; set;}} //Verwenden Sie den Initialisierer, um Mitarbeiter zu erstellen Employee emp = newEmployee {Name= "John Smith", StartDate=DateTime.Now()};
Das obige Beispiel ist nur in Unit-Tests wirklich nützlich, sollte aber in anderen Kontexten vermieden werden, weil Instanzen von Klassen sollte mit Konstruktoren erstellt werden.
3) Lambdas, Prädikate, Delegaten und Abschlüsse
In vielen Fällen (z. B. bei der Verwendung von Linq) sind diese Funktionen tatsächlich erforderlich. Stellen Sie sicher, dass Sie dies tun Erfahren Sie, wann und wie Sie sie verwenden.
4)?? (Null-Koaleszenzoperator)
?? – Operator gibt die linke Seite zurück, solange sie nicht null ist; die rechte Seite:
// Kann null sein. GetValue(); vardefaultValue = 23 // Wenn someValue null ist, ist das Ergebnis 23 varresult = someValue ?? defaultValue ;
?? – Operatoren können verkettet werden:
stringanybody = parm1 ?? globalDefault;
Und es kann verwendet werden, um nullfähige Typen in nicht nullfähige Typen umzuwandeln:
vartotalPurchased = PurchaseQuantities.Sum(kvp => kvp.Value ?? 0);
5) $"{x}" (String-Interpolation) ——C#6
Dies ist für C #6 Eine neue Funktion, mit der Sie Strings auf effiziente und elegante Weise zusammenstellen können:
//Alte Methode varsomeString = String.Format( "Einige Daten: {0} , einige weitere Daten: {1}", someVariable, someOtherVariable); //Neue Methode varsomeString = $"Einige Daten: {someVariable}, einige weitere Daten: {someOtherVariable}";
Sie können C#-Ausdrücke zwischen geschweifte Klammern setzen, was diese String-Interpolation sehr leistungsfähig macht.
6)?. (Null-Bedingungsoperator) – C#6
Null-Bedingungsoperator funktioniert wie folgt:
//Null ifcustomer orcustomer.profile orcustomer.profile.age isnullvar currentAge = customer?.profile?.age;
Keine Aktualisierungen Viele NullReferenceExceptions!
7) nameof Expression – C#6
Der neue nameof-expression scheint vielleicht nicht wichtig zu sein, aber er hat wirklich seinen Wert. Wenn Sie automatische Refactoring-Tools wie ReSharper verwenden, müssen Sie manchmal Methodenparameter namentlich referenzieren:
publicvoid PrintUserName( UsercurrentUser){ // Dem Refactoring-Tool fehlt möglicherweise der Textverweis auf Aktueller Benutzer unten, wenn wir ihn umbenennen if(currentUser == null) _logger Error( "Argument currentUser is not Provided" //...}
You sollte es so verwenden...
publicvoidPrintUserName(User currentUser){ //Das Refactoring-Tool wird dies nicht übersehen...if(currentUser == null) _logger . Fehler( $"Argument {nameof(currentUser)}ist nicht bereitgestellt"); //...} 8) Eigenschaftsinitialisierer – C#6
Eigenschaftsinitialisierer ermöglichen es Ihnen um den Anfangswert einer Eigenschaft zu deklarieren:
publicclassUser{ publicGuidId{ get; // ...}
Ein Vorteil der Verwendung von Eigenschaftsinitialisierern besteht darin, dass Sie keine Sammlung deklarieren können, wodurch die Eigenschaft unveränderlich wird. Eigenschaftsinitialisierer funktionieren mit der Syntax des primären C#6-Konstruktors.
9) as- und is-Operatoren
is-Operator wird verwendet, um zu steuern, ob eine Instanz von einem bestimmten Typ ist , zum Beispiel, wenn Sie sehen möchten, ob eine Konvertierung möglich ist:
if( PersonisAdult){ //do stuff}
Verwenden Sie den as-Operator, um zu versuchen, eine Instanz in eine Klasse umzuwandeln. Wenn es nicht konvertiert werden kann, wird null zurückgegeben:
SomeType y = x asSomeType; if(y != null){ //do stuff} 10) yield keyword
Das Schlüsselwort yield ermöglicht die Bereitstellung einer IEnumerable-Schnittstelle mit Einträgen. Das folgende Beispiel gibt jede Zweierpotenz von 2 bis 8 zurück (zum Beispiel 2,4,8,16,32,64,128,256):
publicstaticIEnumerable Power( intnumber, intexponent){ intresult = 1; for( inti = 0; i < exponent; i++) { result = result * number }}
yield returns; sehr kraftvoll, wenn es richtig eingesetzt wird. Es ermöglicht Ihnen, eine Sammlung von Objekten langsam zu generieren, d. h. das System muss nicht die gesamte Sammlung aufzählen, sondern erledigt dies einfach bei Bedarf.
Weitere Artikel zu 10 Funktionen in C#, die Sie unbedingt lernen (und verwenden!) sollten, finden Sie auf der chinesischen PHP-Website!