Wichtige Visual C#-Änderungen in Visual Studio 2012
In der folgenden Tabelle sind Änderungen in Visual C# in Visual Studio 2012 auf, das möglicherweise entweder eine Anwendung verhindern, die in Visual C# in Visual Studio 2010 erstellte wurde oder das Laufzeitverhalten einer solchen Anwendung geändert hat.
Kategorie |
Problem |
Beschreibung |
---|---|---|
Lambda-Ausdrücke |
Sie können die Iterationsvariable einer foreach-Anweisung in einem Lambda-Ausdruck verwenden, der im Text der Schleife enthalten ist. |
Die Verwendung einer foreach Iterationsvariable in einem geschachtelten Lambda-Ausdruck stellt nicht mehr unerwartete Ergebnisse.Im folgenden Beispiel wird variable word in einem Lambda-Ausdruck.
|
LINQ-Ausdrücke |
Sie können die Iterationsvariable einer foreach-Anweisung in einem LINQ-Ausdruck verwenden, der im Text der Schleife enthalten ist. |
Die Verwendung einer foreach Iterationsvariable in einem LINQ-Ausdruck stellt nicht mehr unerwartete Ergebnisse.Im folgenden Beispiel wird variable number in einer LINQ-Abfrage.
|
Benannte Argumente |
Nebeneffekte von mit dem Namen und Positionsargumente in einem Methodenaufruf treten jetzt von links nach rechts in der Argumentliste auf. |
Nebeneffekte von mit dem Namen und Positionsargumente, die in einem Methodenaufruf kombiniert werden, werden jetzt von links nach rechts in der angegebene Argumentliste der Anweisung erzeugt.Im folgenden Beispiel wird TestMethod aufgerufen, indem Sie eine Kombination von mit dem Namen und Positionsargumente in verschiedenen Bestellungen verwendet.
|
Überladungsauflösung |
Überladungsauflösung ist für Aufrufe verbessert, die benannte Argumente auf Methoden verwenden, die Parameter-Parameter enthalten. |
Wenn mehr als ein Auflösungskandidat gefunden wird, bevorzugt Überladungsauflösung die spezifischste Typabgleichung für benannte Argumente.Parameter, für die Argumente nicht erforderlich oder im Aufruf bereitgestellt sind, werden berücksichtigt, wenn die Typabgleichungen in den Überladungskandidaten gleichwertig sind. Im folgenden Beispiel ist string ein besserer Typ als object für p2.Daher soll die Version von ExampleMethod, in der Parameter p2 als Zeichenfolge definiert ist, ausgewählt werden, obwohl sie über einen dritten params-Parameter verfügt.
|
Überladungsauflösung |
Überladungsauflösung wird für Aufrufe verbessert, in denen der Algorithmus zwischen einem Func<object>-Parameter und einen Func-Parameter auswählen muss, der einen anderen Typparameter (z. string, oder int?) für ein Func<dynamic>-Argument verfügt. |
Im folgenden Beispiel verfügt der Aufruf CandidateMethod, der sendet, ein Func<dynamic>-Argument zwei Auflösungskandidaten.Der entsprechende Parameter in einem der Kandidaten ist Func<object>, und der entsprechende Parameter im anderen ist Func<string>. Der Überladungskandidat, der einen Func<object>-Parameter verfügt, muss ausgewählt werden, da object und dynamic als gleich betrachtet werden.Daher existiert eine Identitätskonvertierung nicht nur zwischen dynamic und object jedoch auch zwischen konstruierten Typen Func<dynamic> und Func<object>.
|
Siehe auch
Referenz
Lambda-Ausdrücke (C#-Programmierhandbuch)
Konzepte
Benannte und optionale Argumente (C#-Programmierhandbuch)