CommunityToolkit / CommunityToolkit/dotnet

[MVVM] Don't add default parameter in attribute constructor

Aperta
#778 1 commento 0 reazioni 0 assegnatari Vedi su GitHub
bug :bug:
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

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.