Changements majeurs au niveau de Visual C# dans Visual Studio 2012
Le tableau suivant répertorie les modifications dans Visual C# dans Visual Studio 2012 qui peut soit empêcher une application créée dans Visual C# dans Visual Studio 2010 de la compilation ou modifier le comportement à l'exécution de cette application.
Catégorie |
Problème |
Description |
---|---|---|
expressions lambda |
Vous pouvez utiliser la variable d'itération d'une instruction d'une boucle foreach dans une expression lambda qui est contenue dans le corps de la boucle. |
L'utilisation d'une variable d'itération de boucle foreach dans une expression lambda imbriquée ne produit plus des résultats inattendus.L'exemple suivant utilise la variable word dans une expression lambda.
|
LINQ Expressions |
Vous pouvez utiliser la variable d'itération d'une instruction d'une boucle foreach dans une expression LINQ qui est contenue dans le corps de la boucle. |
L'utilisation d'une variable d'itération foreach dans une expression LINQ ne produit plus des résultats inattendus.L'exemple suivant illustre number dans une requête LINQ.
|
Arguments nommés |
Les effets secondaires de nommé et les arguments de position dans un appel de méthode se produisent maintenant de gauche à droite dans la liste d'arguments. |
Les effets secondaires de nommé et les arguments de position qui sont regroupés dans un appel de méthode sont maintenant produits de gauche à droite dans la liste d'arguments d'appel de l'instruction.Dans l'exemple suivant, TestMethod est appelé à l'aide d'une combinaison d'arguments nommés et de position dans des ordres différents.
|
Résolution de surcharge |
La résolution de surcharge a été améliorée pour les appels qui utilisent arguments nommés aux méthodes d'accès qui contiennent des paramètres de params . |
Lorsque plus d'un candidat de résolution est trouvé, la résolution de surcharge préfère le type le plus spécifique correspondant aux arguments nommés.Les paramètres pour lesquels les arguments ne sont pas requis ou ne sont pas spécifiés dans l'appel sont considérés uniquement lorsque le type correspond dans les candidats de surcharge sont également bon. Dans l'exemple suivant, string est un meilleur type que object pour p2.Par conséquent, la version de ExampleMethod dans laquelle le paramètre p2 est défini comme une chaîne doit être sélectionné, bien qu'elle ait un paramètre de type params tiers.
|
Résolution de surcharge |
La résolution de surcharge est améliorée pour les appels où l'algorithme doit choisir entre un paramètre d' Func<object> et un paramètre d' Func qui a un paramètre de type différent (par exemple, string ou int?) pour un argument d' Func<dynamic> . |
Dans l'exemple suivant, l'appel à CandidateMethod qui envoie un argument de type Func<dynamic> a deux candidats de résolution.Le paramètre correspondant dans l'un des candidats est Func<object>, et le paramètre correspondant dans l'autre est Func<string>. Le candidat de surcharge qui a un paramètre de type Func<object> doit être choisi parce que les types object et dynamic sont considérés comme équivalents.Par conséquent, une conversion d'identité n'existe pas uniquement entre dynamic et object mais également entre les types construits Func<dynamic> et Func<object>.
|
Voir aussi
Référence
Expressions lambda (Guide de programmation C#)
Concepts
Arguments nommés et facultatifs (Guide de programmation C#)