web-dev-qa-db-fra.com

Utiliser l'initialiseur d'objet - Suggestion de resharper

J'utilise ReSharper tous les jours, et aujourd'hui je me suis demandé pourquoi ReSharper suggère "Utiliser l'initialiseur d'objet" quand je fais ceci:

MyClass myClass = new MyClass();
myClass.MyInt = 0;
myClass.MyString = string.Empty;

Il est remplacé par:

MyClass myClass = new MyClass
{
    MyInt = 0, 
    MyString = string.Empty
};

Est-ce que cela optimise l'exécution de mon code, ou s'agit-il simplement d'un reformatage?

Personnellement, j'aime ça. Mais parfois je déteste ça, à cause de ça:

Resharper

Je ne peux pas faire step-by-step débogage :(

32
Wassim AZIRAR

Le second contient moins de caractères et est donc plus compact à lire. Vous n'avez pas à répéter myClass 2 fois de plus, et la logique d'initialisation est dans un bloc.

C'est vraiment un sucre syntaxique qui ne change rien au code généré. Si vous ne l'aimez pas, vous pouvez toujours désactiver l'avertissement sur ReSharper.

Un article plus long sur les avantages de l'utilisation des initialiseurs d'objets ici:

27
Cyril Gandon

Vous pouvez effectuer un débogage étape par étape partiellement si les initialiseurs sont des appels de fonction:

MyClass c = new MyClass() 
{
    MyInt = 3,
    MyString = GenerateString(9)
};

Dans ce cas, F11 vous mènera directement à la méthode GenerateString.

EDIT: Si les initialiseurs sont des valeurs simples, le débogage étape par étape n'a de toute façon aucun sens.

6
Zoran Horvat