Je complète en disant que cela va générer le même code que dans la 1ere solution, mais ça sera plus propre.
Je complète en disant que cela va générer le même code que dans la 1ere solution, mais ça sera plus propre.
C'est top, merci.
@tomlev :
Je vais tâcher de jeter un coup d’œil sur la discussion, je ne me suis pas encore vraiment penché sur roslyn et certains de ses aspects m'échappent.
Pour les littéraux, en effet ce ne sera pas ajouté, mais comme j'en manipule occasionnellement ça m'aurait intéressé x)
Ah oui, je me rappelle now que tu le soulignes pour le tuple x)
@Tidus, autre exemple typique pour nameof :
L'avantage par rapport à new ArgumentNullException("name") est multiple :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 public void SayHello(string name) { if (name == null) throw new ArgumentNullException(nameof(name)); Console.WriteLine($"Hello {name}"); }
- l'Intellisense te propose le nom du paramètre
- le compilateur vérifie que le nom que tu as mis correspond bien à quelque chose qui existe
- les outils de refactoring sont capables de modifier l'instruction si tu renommes le paramètre.
Pas de questions techniques par MP ! Le forum est là pour ça...
Tutoriels : Les nouveautés de C# 6 - Accès aux données avec Dapper - Extraction de données de pages web à l'aide de HTML Agility Pack - La sérialisation XML avec .NET (Aller plus loin) - Les markup extensions en WPF
Dans la même veine, pour INotifyPropertyChanged, même si on sait déjà faire autrement. (J'aime beaucoup ton exemple tomlev)
En fait pour INotifyPropertyChanged il y a déjà un truc encore mieux depuis C# 5 : les caller info attributes, qui permettent de passer implicitement le nom de la propriété en paramètre.
J'utilise généralement une classe de base de ce style pour mes ViewModels:
Ce qui permet de faire des choses comme ça :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 class ObservableBase : INotifyPropertyChanged { public event PropertyChangedEventHandler PropertyChanged; protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null) { PropertyChanged?.Invoke(new PropertyChangedEventArgs(propertyName)); } protected bool Set<T>(ref T field, T newValue, [CallerMemberName] string propertyName = null) { if (EqualityComparer<T>.Default.Equals(field, newValue)) return false; field = newValue; OnPropertyChanged(propertyName); return true; } }
Ou encore comme ça, en utilisant aussi nameof :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 private string _name; public string Name { get { return _name;} set { Set(ref _name, value); } }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 private string _firstName; public string FirstName { get { return _firstName;} set { if (Set(ref _firstName, value)) OnPropertyChanged(nameof(FullName)); } } private string _lastName; public string LastName { get { return _lastName;} set { if (Set(ref _lastName, value)) OnPropertyChanged(nameof(FullName)); } } public string FullName => FirstName + " " + LastName;
Pas de questions techniques par MP ! Le forum est là pour ça...
Tutoriels : Les nouveautés de C# 6 - Accès aux données avec Dapper - Extraction de données de pages web à l'aide de HTML Agility Pack - La sérialisation XML avec .NET (Aller plus loin) - Les markup extensions en WPF
Ah tiens pas bête, je ne pense jamais à cet élément
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager