CommunityToolkit / CommunityToolkit/dotnet
[MVVM] Don't add default parameter in attribute constructor
- Lingua principale
- C#
- Stelle
- 3.8k
- Fork
- 400
- Metriche di merge delle PR
- Nessuna PR unita negli ultimi 30g
Descrizione
### Describe the bug
I have an Attribute, which constructor looks like this:
```csharp
[AttributeUsage(AttributeTargets.Field | AttributeTargets.Property, AllowMultiple = false, Inherited = false)]
public class CrossValidateAttribute : ValidationAttribute {
public CrossValidateAttribute([CallerMemberName] string? member = null) { }
}
```
The idea is to get the properties name when this gets constructed.
If I put this on a normal Property, e.g.
```csharp
[CrossValidate]
public string Foo { ... }
```
it will work and I get `Foo` as content of `member`.
But, if I put this on an `[ObservableProperty]` the generator will output this:
```csharp
[ObservableProperty]
[CrossValidate]
private string? bar;
```
```csharp
///
[global::System.CodeDom.Compiler.GeneratedCode("CommunityToolkit.Mvvm.SourceGenerators.ObservablePropertyGenerator", "8.2.0.0")]
[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
[global::XXX.CrossValidateAttribute(null)]
public string? Bar { ... }
```
Here you can see the `XXX.CrossValidateAttribute(null)` call, which is not want I want.
Can this be done the way I want it, e.g. `XXX.CrossValidateAttribute()`?
### IDE and version
VS 2022
### IDE version
Version 17.7.6
### Nuget packages
- [ ] CommunityToolkit.Common
- [ ] CommunityToolkit.Diagnostics
- [ ] CommunityToolkit.HighPerformance
- [X] CommunityToolkit.Mvvm (aka MVVM Toolkit)
### Nuget package version(s)
8.2.2
### Additional context
_No response_
### Help us help you
Yes, I'd like to be assigned to work on this item
Guida per i contributori
Apri la guida per i contributori
Direzione di ricerca
Non viene indicato alcun file del repository né alcun test; inizia individuando il generatore di codice sorgente di ObservableProperty e la relativa gestione degli attributi copiati. Riproduci l'output generato di CrossValidateAttribute(null), quindi verifica che il comportamento completato mantenga l'invocazione prevista del costruttore senza l'argomento null esplicito indesiderato.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Valutazione
- Stack tecnologico
- csharp
- Ambito
- tooling
- Tipo di issue
- Bug
- Difficoltà
- 4/5
- Tempo stimato
- 3-5 giorni
- Stato di attività
- Ferma
- Chiarezza
- Abbastanza chiara
- Idoneità per principianti
- 35/100