-
Notifications
You must be signed in to change notification settings - Fork 344
Description
Describe the bug
When decorating a property of a reference or otherwise nullable type with [ObservableProperty]
the two-argument partial property-changing and property-changed method prototypes are generated differently than for decorated fields, not considering that the oldValue
argument may be null.
Regression
No response
Steps to reproduce
- Create a new project targeting .NET 9.0 and depending on CommunityToolkit.Mvvm
- Create a class inheriting from
ObservableObject
- Add the following code to the class:
[ObservableProperty] private object _testA; [ObservableProperty] public object TestB { get; set; } partial void OnTestAChanged(object? oldValue, object newValue) { /* do nothing */ } partial void OnTestBChanged(object? oldValue, object newValue) { /* do nothing */ }
- Note that
OnTestBChanged
has warning CS8826 on it, because the generated partial declaration ispartial void OnTestBChanged(global::System.Object oldValue, global::System.Object newValue);
but there's no such warning forOnTestAChanged
.
Expected behavior
The OnChanging(oldValue,newValue) and OnChanged(oldValue,newValue) partial method declarations for properties decorated with ObservablePropertyAttribute will be generated the same as for fields decorated with same.
Screenshots
No response
IDE and version
VS 2022
IDE version
17.14.9
Nuget packages
- CommunityToolkit.Common
- CommunityToolkit.Diagnostics
- CommunityToolkit.HighPerformance
- CommunityToolkit.Mvvm (aka MVVM Toolkit)
Nuget package version(s)
8.4.0
Additional context
The oldValue
argument should always be generated as nullable for reference types as the initial call to the methods may be due to setting the property in the constructor (e.g. initial value may be based on a constructor argument, or the change methods may be used to set up and remove event handlers on the property value).
Help us help you
No, just wanted to report this