IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

Vous êtes nouveau sur Developpez.com ? Créez votre compte ou connectez-vous afin de pouvoir participer !

Vous devez avoir un compte Developpez.com et être connecté pour pouvoir participer aux discussions.

Vous n'avez pas encore de compte Developpez.com ? Créez-en un en quelques instants, c'est entièrement gratuit !

Si vous disposez déjà d'un compte et qu'il est bien activé, connectez-vous à l'aide du formulaire ci-dessous.

Identifiez-vous
Identifiant
Mot de passe
Mot de passe oublié ?
Créer un compte

L'inscription est gratuite et ne vous prendra que quelques instants !

Je m'inscris !

Microsoft a publié la version stable de Visual Studio 2022 avec une nouvelle expérience de rechargement à chaud pour les applications natives C++,
Cette version est disponible uniquement en 64 bits

Le , par Bill Fassinou

10PARTAGES

4  0 
Microsoft a annoncé lundi la disponibilité générale de Visual Studio 2022 avec de nouvelles fonctionnalités et améliorations pour faciliter la programmation en Visual C++, Visual Basic, C#, F#, Python et autres. Visual Studio 2022 est la première version 64 bits de l'EDI. En rendant Visual Studio 64 bits, les responsables ont déclaré qu'ils s'attendaient à ce que la version utilise mieux toutes les ressources du système, en particulier lors du travail sur des solutions plus complexes sur de longues périodes. Voici une liste des nouveautés et des améliorations les plus importantes introduites dans Visual Studio 2022.



Services de cloud Azure

  • les projets Azure Cloud Service (classique) et Azure Cloud Service (support étendu) sont désormais pris en charge.


Développement C++

  • les outils de construction v143 sont maintenant disponibles via l'installateur Visual Studio ainsi que les outils de construction autonomes ;
  • la nouvelle expérience de rechargement à chaud est désormais disponible pour les applications C++ natives lorsqu'elles sont exécutées sous le débogueur. Il prend en charge les projets MSBuild et CMake ;
  • vous pouvez maintenant construire et déboguer en mode natif sur WSL2 sans établir de connexion SSH. Les projets CMake multiplateformes et les projets Linux basés sur MSBuild sont tous deux pris en charge ;
  • Visual Studio prend désormais en charge l'option buildPresets.targets dans CMakePresets.json. Cela vous permet de construire un sous-ensemble de cibles dans votre projet CMake ;
  • le menu Projet dans les projets CMake a été simplifié et expose les options "Supprimer le cache et reconfigurer" et "Voir le cache" ;
  • les pages de présentation de CMake ont été mises à jour pour supporter CMakePresets.json ;
  • vous pouvez désormais déboguer les processus s'exécutant sur un système distant depuis Visual Studio avec LLDB.
  • nous avons mis à jour la version de CMake livrée avec Visual Studio à la version 3.21 ;
  • les outils LLVM livrés avec Visual Studio ont été mis à niveau vers LLVM 12 ;
  • l'ensemble d'outils MSVC utilise désormais par défaut le hachage de source SHA-256 dans les enregistrements de débogage. Auparavant, le jeu d'outils utilisait par défaut le MD5 pour le hachage des sources ;
  • la charge de travail sur le développement de jeux avec C++ installe maintenant la dernière version d'Unreal Engine avec le support de Visual Studio 2022 ;
  • des améliorations ont été apportées à l'IntelliSense C++ lors de la navigation et de la mise en évidence de la syntaxe pour les types provenant de modules et d'unités d'en-tête importés ;
  • amélioration des performances d'IntelliSense C++ en optimisant l'utilisation des en-têtes en cache et l'accès à la base de données des symboles, ce qui permet d'améliorer les temps de chargement pour entrer dans votre code ;
  • le Linter de code IntelliSense pour C++ est maintenant activé par défaut. Il fournit des suggestions instantanées de type "as-you-type" et des suggestions de correction pour les défauts de code courants ;
  • prise en charge de libfuzzer avec l'option -fsanitize=fuzzer ;
  • amélioration de la détection de déréférencement des pointeurs null dans notre outil d'analyse de code ;
  • l'analyse de code impose désormais que les valeurs de retour des fonctions annotées avec _Check_return_ ou _Must_inspect_result_ soient vérifiées ;
  • ajout du support de gsl::not_null à l'analyse de code ;
  • mise à jour vers NDK r21 LTS dans la charge de travail C++ Mobile Development ;
  • les en-têtes AMP C++ sont désormais obsolètes. Inclure <amp.h> dans un projet C++ générera des erreurs de construction. Pour faire taire les erreurs, définissez _SILENCE_AMP_DEPRECATION_WARNINGS ;
  • etc.


Débogage et diagnostic

  • améliorations de l'aide aux exceptions ;
  • analyse diagnostique par vidage de mémoire ;
  • un nouveau type de point d'arrêt appelé Point d'arrêt dépendant (Dependent Breakpoint), qui vous permet de configurer un point d'arrêt pour qu'il ne soit activé que si un autre point d'arrêt est d'abord touché ;
  • ajout de nouvelles mises à jour au nœud Sources Extrenales, vous pouvez maintenant voir le module sous le sous-nœud "Modules without Sources" et charger les symboles à partir de l'explorateur de solutions lui-même ;
  • point de rupture temporaire ;
  • point de rupture par glisser-déposer ;
  • etc.


Personnalisation

  • ajout d'onglets de couleur pour les onglets verticaux et horizontaux ;
  • ajout du pack de thèmes et collaboration avec les auteurs de thèmes VS Code pour lancer une collection de thèmes personnalisés ;
  • création d'un convertisseur de thèmes pour convertir les thèmes VS Code et les faire fonctionner dans Visual Studio 2022 ;
  • ajout de la possibilité de synchroniser le thème de Visual Studio avec le thème de Windows ;
  • ajout de nouvelles capacités de gestion des documents, notamment la personnalisation de la largeur des onglets, la mise en gras du document actif et un bouton de fermeture supplémentaire dans docwell ;
  • etc.


Éditeur

  • ajout de la navigation par "sous-mots" ;
  • l'enregistrement automatique est désormais disponible en tant que fonction d'aperçu ;
  • possibilité de copier/coller à partir de plusieurs onglets ;
  • etc.


Extensibilité

  • suppression des API des assemblées Microsoft.VisualStudio.Language.Client ;
  • VS SDK contient plusieurs changements de rupture et les extensions Visual Studio 2019 ne fonctionneront pas en 2022 ;
  • les assemblages de référence VS SDK ne sont plus installés dans le dossier VSSDK\VisualStudioIntegration\Common\Assemblies. Si votre construction dépendait de ces assemblages, veuillez migrer votre projet pour utiliser les paquets NuGet à la place ;
  • ajout de corrections de changements de rupture pour ILanguageClient ;
  • etc.


Services Cloud

  • Azurite sera utilisé pour l'émulation locale d'Azure Storage au lieu de l'émulateur Azure Storage, qui n'est plus développé activement.


Outillage Git

  • prise en charge des dépôts multiples sous un drapeau de prévisualisation pour toute solution qui s'étend sur différents dépôts (c'est-à-dire les solutions avec des projets hébergés dans différents dépôts Git) ;
  • la publication vers Azure DevOps est désormais entièrement prise en charge dans l'expérience de création de dépôt Git ;
  • améliorations de la barre d'état, notamment la possibilité d'afficher et d'ouvrir des dépôts à partir d'un VS vide et d'afficher le nombre de commits non retirés ;
  • le menu de débordement de la fenêtre Modifications Git est maintenant disponible pour les dépôts locaux uniquement avec des opérations git supplémentaires ;
  • la barre d'outils Diff unifiée contenant le nombre de lignes ajoutées/supprimées et des options de configuration découvrables ;
  • améliorations des détails des engagements, y compris une interface utilisateur plus réactive et plus conviviale ;
  • etc.


Le rechargement à chaud

  • le rechargement à chaud est désormais disponible pour les développeurs .NET via le débogueur de Visual Studio et sans débogueur pour de nombreux types d'applications .NET 6.


IntelliCode

  • les complétions de ligne entière prédisent votre prochain morceau de code C# en fonction de votre contexte actuel, et le présente comme une suggestion en ligne à droite de votre curseur ;
  • les complétions de lignes entières sont maintenant compatibles avec les dernières versions de JetBrains ReSharper. Notez que la mise à jour du contexte de complétion de ligne basée sur la sélection de la liste des complétions personnalisées de ReSharpers n'est pas supportée - si nécessaire, les utilisateurs de ReSharper peuvent choisir d'utiliser l'IntelliSense natif de Visual Studio à la place ;
  • etc.


JavaScript/TypeScript

  • un nouveau type de projet JavaScript/TypeScript qui permet de créer des projets JavaScript/TypeScript autonomes avec des outils supplémentaires. Vous serez en mesure de créer des projets Angular et React dans Visual Studio en utilisant la version du framework installée sur votre ordinateur ;
  • les tests JavaScript et TypeScript sont désormais disponibles dans l'explorateur de tests de Visual Studio ;
  • l'interface graphique npm est disponible. Vous pouvez désormais télécharger des modules npm de la même manière que vous téléchargez des paquets Nuget ;
  • etc.


Productivité .NET

  • le SDK .NET 6 est inclus dans Visual Studio 2022 ;
  • l'introduction du refactoring des paramètres permet de déplacer un nouveau paramètre de l'implémentation de la méthode vers ses appelants ;
  • suivi de la source des valeurs pour l'analyse du flux de données ;
  • option pour souligner les variables qui sont réaffectées ;
  • ajout d'une option de recherche dans la boîte de dialogue Generate Overrides ;
  • l'info-bulle pour les balises XML <code> préserve désormais les espaces et les blocs CDATA ;
  • la fenêtre Find All References regroupe désormais les projets multi-cibles ;
  • "Go to Implementation" ne navigue plus vers les membres dont les déclarations abstraites sont également surchargées ;
  • synchronisation des espaces de noms pour qu'ils correspondent à la structure de votre dossier à partir de l'explorateur de solutions ;
  • configuration de l'analyse du code en arrière-plan à partir de l'explorateur de solutions ;
  • les types de référence annulables sont désormais activés par défaut pour les nouveaux projets .NET ;
  • la navigation vers les sources décompilées est maintenant activé par défaut ;
  • les commentaires XML génèrent désormais automatiquement une balise <exception> lorsqu'une méthode lève explicitement des exceptions ;
  • la marge d'héritage est désormais activée par défaut ;
  • etc.


Éditeur Razor (ASP.NET Core)

  • réduction des blocages de l'interface utilisateur et amélioration des performances au démarrage de la solution ;
  • colorisation sémantique plus rapide, jusqu'à 2x dans certaines solutions ;
  • prise en charge de F7 (afficher le code) dans les fichiers Razor ;
  • meilleur formatage dans les blocs @code lorsqu'il y a des composants HTML et Razor imbriqués ;
  • support du rechargement à chaud dans les fichiers Razor ;
  • etc.


Amélioration des performances

  • amélioration du formatage et de l'indentation ;
  • nouvelles couleurs de l'éditeur Razor ;
  • les TagHelpers sont désormais colorés et disposent d'un support de classification d'informations rapides et d'infobulles d'achèvement ;
  • mise en évidence des accolades et navigation pour les constructions Razor ;
  • les commentaires sont désormais dotés de l'autocomplétion, de l'indentation intelligente, de l'inclusion automatique de la continuité des commentaires et de la navigation dans les blocs de commentaires ;
  • etc.


Tests à distance

  • aperçu expérimental très précoce de la possibilité d'exécuter des tests sur des environnements distants tels que des conteneurs linux, WSL et sur des connexions SSH ;
  • support des outils de test ;
  • etc.


Source : Visual Studio 2022

Et vous ?

Que pensez-vous des changements introduits par Visual Studio 2022 ?

Voir aussi

Microsoft présente Visual Studio 2022, la prochaine version majeure de Visual Studio. La première Public Preview sera disponible cet été

Visual Studio 2022 Preview 4 est disponible et s'accompagne d'améliorations sur la productivité personnelle et d'équipe, le chargement à chaud dans ASP.NET Core et la gestion de thèmes

Visual Studio 2022 64-bit Preview 2 est disponible, elle apporte de nouvelles fonctionnalités et permet de créer des applications multiplateformes

Visual Studio 2022 Preview 3 est disponible et s'accompagne de la possibilité d'effectuer des tests à distance sur plusieurs plateformes, ainsi que d'une amélioration du thème sombre

Microsoft améliore l'expérience .NET Hot Reload sur Visual Studio 2022, la version de son éditeur qui va bénéficier de l'expérience complète

Une erreur dans cette actualité ? Signalez-le nous !

Avatar de Stéphane le calme
Chroniqueur Actualités https://www.developpez.com
Le 09/11/2021 à 11:06
Microsoft annonce la sortie de C# 10 dans le cadre de .NET 6 et Visual Studio 2022.
C# 10 apporte des améliorations aux expressions lambda et plusieurs fonctionnalités

« Aujourd'hui, nous sommes heureux d'annoncer la sortie de C# 10 dans le cadre de .NET 6 et Visual Studio 2022 », a indiqué Kathleen Dollard, Principal Program Manager, .NET. Voici les améliorations et nouveautés apportées par cette version.

Utilisations globales et implicites

Les directives using simplifient la façon dont vous travaillez avec les espaces de noms. C# 10 inclut une nouvelle directive using global et des utilisations implicites pour réduire le nombre d'utilisations que vous devez spécifier en haut de chaque fichier.

Directives global using

Si le mot-clé global apparaît avant une directive using, cette utilisation s'applique à l'ensemble du projet*:

Code C# : Sélectionner tout
global using System;

Vous pouvez utiliser n'importe quelle fonctionnalité de using dans une directive using global. Par exemple, l'ajout de static importe un type et rend les membres du type et les types imbriqués disponibles dans tout votre projet. Si vous utilisez un alias dans votre directive using, cet alias affectera également l'ensemble de votre projet*:

Code C# : Sélectionner tout
1
2
global using static System.Console;
global using Env = System.Environment;

Vous pouvez mettre using global dans n'importe quel fichier .cs, y compris Program.cs ou un fichier spécifiquement nommé comme globalusings.cs. Le périmètre de using global est la compilation en cours, qui correspond généralement au projet en cours.

modificateur static

La directive using static nomme un type dont les membres statiques et les types imbriqués vous pouvez accéder sans spécifier de nom de type. La directive using static a été introduite avec C# 6. Sa syntaxe est la suivante :

Code C# : Sélectionner tout
using static <nom de type complet>;

Le <nom de type complet> est le nom du type dont les membres statiques et les types imbriqués peuvent être référencés sans spécifier de nom de type. Si vous ne fournissez pas de nom de type qualifié complet (le nom d’espace de noms complet avec le nom de type), C# génère l’erreur de compilateur CS0246: « le type ou le nom d’espace de noms’type/espace de noms’est introuvable (une directive using ou une référence d'assemblage est-elle manquante ?) ».

La directive using static s’applique à tout type ayant des membres statiques (ou des types imbriqués), même s’il a également des membres d’instance. Toutefois, les membres d’instance ne peuvent être appelés que par l’instance du type.

Vous pouvez accéder aux membres statiques d'un type sans devoir qualifier l'accès avec le nom du type :

Code C# : Sélectionner tout
1
2
3
4
5
6
7
8
9
using static System.Console;
using static System.Math;
class Program
{
    static void Main()
    {
        WriteLine(Sqrt(3*3 + 4*4));
    }
}

En général, quand vous appelez un membre statique, vous indiquez le nom du type, ainsi que le nom du membre. Entrer plusieurs fois le même nom de type pour appeler des membres du type peut produire du code détaillé et peu clair. Par exemple, la définition suivante d’une classe Circle fait référence à de nombreux membres de la classe Math :

Code C# : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
using System;
 
public class Circle
{
   public Circle(double radius)
   {
      Radius = radius;
   }
 
   public double Radius { get; set; }
 
   public double Diameter
   {
      get { return 2 * Radius; }
   }
 
   public double Circumference
   {
      get { return 2 * Radius * Math.PI; }
   }
 
   public double Area
   {
      get { return Math.PI * Math.Pow(Radius, 2); }
   }
}

En éliminant la nécessité de référencer explicitement la classe Math chaque fois qu’un membre est référencé, la directive using static génère du code plus propre :

Code C# : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
using System;
using static System.Math;
 
public class Circle
{
   public Circle(double radius)
   {
      Radius = radius;
   }
 
   public double Radius { get; set; }
 
   public double Diameter
   {
      get { return 2 * Radius; }
   }
 
   public double Circumference
   {
      get { return 2 * Radius * PI; }
   }
 
   public double Area
   {
      get { return PI * Pow(Radius, 2); }
   }
}

using static importe uniquement les membres statiques accessibles et les types imbriqués déclarés dans le type spécifié. Les membres hérités ne sont pas importés. vous pouvez importer à partir de n’importe quel type nommé avec une directive using static, y compris Visual Basic modules. Si des fonctions de niveau supérieur F# apparaissent dans les métadonnées comme membres statiques d’un type nommé dont le nom est un identificateur C# valide, les fonctions F# peuvent être importées.

using static rend les méthodes d'extension déclarées dans le type spécifié disponibles pour la recherche de méthode d'extension. Toutefois, les noms des méthodes d’extension ne sont pas importés dans la portée pour une référence non qualifiée dans le code.

Les méthodes portant le même nom et qui sont importées à partir de différents types par différentes directives using static dans la même unité de compilation ou le même espace de noms forment un groupe de méthodes. La résolution de surcharge au sein de ces groupes de méthodes suit des règles C# normales.

L’exemple suivant utilise la directive using static pour que les membres statiques des classes Console, Math et String soient disponibles sans que vous ayez à spécifier leur nom de type :

Code C# : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
using System;
using static System.Console;
using static System.Math;
using static System.String;
 
class Program
{
   static void Main()
   {
      Write("Enter a circle's radius: ");
      var input = ReadLine();
      if (!IsNullOrEmpty(input) && double.TryParse(input, out var radius)) {
         var c = new Circle(radius);
 
         string s = "\nInformation about the circle:\n";
         s = s + Format("   Radius: {0:N2}\n", c.Radius);
         s = s + Format("   Diameter: {0:N2}\n", c.Diameter);
         s = s + Format("   Circumference: {0:N2}\n", c.Circumference);
         s = s + Format("   Area: {0:N2}\n", c.Area);
         WriteLine(s);
      }
      else {
         WriteLine("Invalid input...");
      }
   }
}
 
public class Circle
{
   public Circle(double radius)
   {
      Radius = radius;
   }
 
   public double Radius { get; set; }
 
   public double Diameter
   {
      get { return 2 * Radius; }
   }
 
   public double Circumference
   {
      get { return 2 * Radius * PI; }
   }
 
   public double Area
   {
      get { return PI * Pow(Radius, 2); }
   }
}
// The example displays the following output:
//       Enter a circle's radius: 12.45
//
//       Information about the circle:
//          Radius: 12.45
//          Diameter: 24.90
//          Circumference: 78.23
//          Area: 486.95

Dans cet exemple, la directive using static aurait également pu être appliquée au type Double. L’ajout de cette directive permet d’appeler la méthode TryParse(String, Double) sans spécifier de nom de type. Toutefois, l’utilisation de TryParse sans nom de type crée un code moins lisible, puisqu’il est nécessaire de vérifier les directives using static pour déterminer la méthode du type numérique que TryParse appelle.


ImplicitUsing

La fonctionnalité ImplicitUsing ajoute automatiquement des directives global using communes pour le type de projet que vous créez. Pour activer les utilisations implicites, définissez la propriété ImplicitUsings dans votre fichier .csproj*:

Code XML : Sélectionner tout
1
2
3
4
<PropertyGroup>
    <!-- Other properties like OutputType and TargetFramework -->
    <ImplicitUsings>enable</ImplicitUsings>
</PropertyGroup>

Les utilisations implicites sont activées dans les nouveaux modèles .NET 6.

L'ensemble spécifique de directives d'utilisation globales incluses dépend du type d'application que vous créez. Par exemple, les utilisations implicites d'une application console ou d'une bibliothèque de classes sont différentes de celles d'une application ASP.NET.

Combiner les fonctionnalités using

Les directives using traditionnelles en haut de vos fichiers, les directives using globales et les utilisations implicites fonctionnent bien ensemble. Les utilisations implicites vous permettent d'inclure les espaces de noms .NET appropriés au type de projet que vous créez avec une seule ligne dans votre fichier de projet. Les directives d'utilisation globales vous permettent d'inclure des espaces de noms supplémentaires pour les rendre disponibles tout au long de votre projet. Les directives using en haut de vos fichiers de code vous permettent d'inclure des espaces de noms utilisés par quelques fichiers seulement dans votre projet.

Quelle que soit la façon dont elles sont définies, les directives using supplémentaires augmentent la possibilité d'ambiguïté dans la résolution de noms. Si vous rencontrez ce problème, envisagez d'ajouter un alias ou de réduire le nombre d'espaces de noms que vous importez. Par exemple, vous pouvez remplacer les directives using globales par des directives using explicites en haut d'un sous-ensemble de fichiers.

Si vous devez supprimer des espaces de noms qui ont été inclus via des utilisations implicites, vous pouvez les spécifier dans votre fichier projet*:

Code XML : Sélectionner tout
1
2
3
<ItemGroup>
  <Using Remove="System.Threading.Tasks" />
</ItemGroup>

Vous pouvez également ajouter un espace de noms qui se comporte comme s'il s'agissait de directives using globales, vous pouvez ajouter des éléments Using à votre fichier projet, par exemple*:

Code XML : Sélectionner tout
1
2
3
<ItemGroup>
  <Using Include="System.IO.Pipes" />
</ItemGroup>

Espaces de noms qui portent sur un fichier

De nombreux fichiers contiennent du code pour un seul espace de noms. À partir de C# 10, vous pouvez inclure un espace de noms en tant qu'instruction, suivi d'un point-virgule et sans les accolades*:

Code C# : Sélectionner tout
1
2
3
4
namespace MyCompany.MyNamespace;
 
class MyClass // Note: no indentation
{ ... }

Cela simplifie le code et supprime un niveau d'imbrication. Une seule déclaration d'espace de noms à portée de fichier est autorisée, et elle doit intervenir avant que les types ne soient déclarés.

Le mot clé namespace est utilisé pour déclarer une portée qui contient un ensemble d’objets connexes. Vous pouvez utiliser un espace de noms pour organiser les éléments de code et créer des types globaux uniques.

Code C# : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
namespace SampleNamespace
{
    class SampleClass { }
 
    interface ISampleInterface { }
 
    struct SampleStruct { }
 
    enum SampleEnum { a, b }
 
    delegate void SampleDelegate(int i);
 
    namespace Nested
    {
        class SampleClass2 { }
    }
}

Les déclarations d’espaces de noms avec étendue de fichier vous permettent de déclarer que tous les types d’un fichier se trouvent dans un espace de noms unique. Les déclarations d’espaces de noms avec étendue de fichier sont disponibles avec C# 10. L’exemple suivant est similaire à l’exemple précédent, mais utilise une déclaration d’espace de noms avec étendue de fichier :

Code C# : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
using System;
 
namespace SampleFileScopedNamespace;
 
class SampleClass { }
 
interface ISampleInterface { }
 
struct SampleStruct { }
 
enum SampleEnum { a, b }
 
delegate void SampleDelegate(int i);

L’exemple précédent n’inclut pas d’espace de noms imbriqué. Les espaces de noms de portée de fichier ne peuvent pas inclure de déclarations d’espaces de noms supplémentaires. Vous ne pouvez pas déclarer un espace de noms imbriqué ou un deuxième espace de noms de portée de fichier :

Code C# : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
namespace SampleNamespace;
 
class AnotherSampleClass
{
    public void AnotherSampleMethod()
    {
        System.Console.WriteLine(
            "SampleMethod inside SampleNamespace");
    }
}
 
namespace AnotherNamespace; // Not allowed!
 
namespace ANestedNamespace // Not allowed!
{
   // declarations...
}

Améliorations des expressions lambda et des groupes de méthodes

Microsoft a apporté plusieurs améliorations aux types et à la syntaxe entourant les lambdas. L'entreprise s'attend à ce que ceux-ci soient largement utiles, et l'un des scénarios de conduite a été de rendre les API ASP.NET minimales encore plus simples.

Types naturels pour les lambdas

Les expressions lambda ont maintenant parfois un type « naturel ». Cela signifie que le compilateur peut souvent déduire le type de l'expression lambda.

Jusqu'à présent, une expression lambda devait être convertie en un délégué ou un type d'expression. Dans la plupart des cas, vous utiliserez l'un des types de délégués surchargés Func<...> ou Action<...> dans la BCL*:

Code C# : Sélectionner tout
Func<string, int> parse = (string s) => int.Parse(s);

À partir de C# 10, cependant, si un lambda n'a pas un tel « type cible », l'éditeur va essayer d'en calculer un pour vous*:

Code C# : Sélectionner tout
var parse = (string s) => int.Parse(s);

Vous pouvez survoler var parse dans votre éditeur et voir que le type est toujours Func<string, int>. En général, le compilateur utilisera un délégué Func ou Action disponible, s'il en existe un approprié. Sinon, il synthétisera un type délégué (par exemple, lorsque vous avez des paramètres ref ou que vous avez un grand nombre de paramètres).

Tous les lambdas n'ont pas de types naturels - certains n'ont tout simplement pas assez d'informations sur les types. Par exemple, omettre les types de paramètres laissera le compilateur incapable de décider quel type de délégué utiliser*:

Code C# : Sélectionner tout
var parse = s => int.Parse(s); // ERROR: Not enough type info in the lambda

Le type naturel des lambdas signifie qu'ils peuvent être affectés à un type plus faible, tel que objet ou Delegate*:

Code C# : Sélectionner tout
1
2
object parse = (string s) => int.Parse(s);   // Func<string, int>
Delegate parse = (string s) => int.Parse(s); // Func<string, int>

En ce qui concerne les arbres d'expression, Microsoft fait une combinaison de typage «*cible*» et «*naturel*». Si le type cible est LambdaExpression ou l'Expression non générique (type de base pour toutes les arborescences d'expressions) et que lambda a un type délégué naturel D, l'éditeur produira à la place une Expression<D>*:

Code C# : Sélectionner tout
1
2
LambdaExpression parseExpr = (string s) => int.Parse(s); // Expression<Func<string, int>>
Expression parseExpr = (string s) => int.Parse(s);       // Expression<Func<string, int>>

Types naturels pour les groupes de méthodes

Les groupes de méthodes (c'est-à-dire les noms de méthodes sans listes d'arguments) ont maintenant aussi parfois un type naturel. Vous avez toujours pu convertir un groupe de méthodes en un type délégué compatible*:

Code C# : Sélectionner tout
1
2
Func<int> read = Console.Read;
Action<string> write = Console.Write;

Maintenant, si le groupe de méthodes n'a qu'une seule surcharge, il aura un type naturel*:

Code C# : Sélectionner tout
1
2
var read = Console.Read; // Just one overload; Func<int> inferred
var write = Console.Write; // ERROR: Multiple overloads, can't choose

Source : Microsoft

Voir aussi

Microsoft présente Visual Studio 2022, la prochaine version majeure de Visual Studio. La première Public Preview sera disponible cet été
Visual Studio 2022 Preview 4 est disponible et s'accompagne d'améliorations sur la productivité personnelle et d'équipe, le chargement à chaud dans ASP.NET Core et la gestion de thèmes
Visual Studio 2022 64-bit Preview 2 est disponible, elle apporte de nouvelles fonctionnalités et permet de créer des applications multiplateformes
Visual Studio 2022 Preview 3 est disponible et s'accompagne de la possibilité d'effectuer des tests à distance sur plusieurs plateformes, ainsi que d'une amélioration du thème sombre
Microsoft améliore l'expérience .NET Hot Reload sur Visual Studio 2022, la version de son éditeur qui va bénéficier de l'expérience complète
8  0 
Avatar de youtpout978
Expert confirmé https://www.developpez.com
Le 09/11/2021 à 14:20
Citation Envoyé par Issam Voir le message
heuuu, il n'y a pas de version 2018
Je pense il veut dire 2008
0  0