Информация об изменениях

Сообщение Re[7]: [C#] горшочек, не вари от 05.11.2024 15:37

Изменено 05.11.2024 15:46 Serginio1

Re[7]: [C#] горшочек, не вари
Здравствуйте, Silver_S, Вы писали:
S_S>Например:
S_S>
S_S>property[MyStyle1] string? Location
S_S>{
S_S>    //...before
S_S>    _location = value;
S_S>    //...after
S_S>}
S_S>


Здесь проблема, что SG не может модифицировать существующий код

Для римера PropertyChanged.SourceGenerator
А вот такой легко превращает из полей свойства и методы
using PropertyChanged.SourceGenerator;
public partial class MyViewModel
{
    [Notify] private string _lastName;
    public string FullName => $"Dr. {LastName}";
}



partial class MyViewModel : INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged;

    public string LastName
    {
        get => _lastName;
        set
        {
            if (!EqualityComparer<string>.Default.Equals(_lastName, value))
            {
                _lastName = value;
                OnPropertyChanged(EventArgsCache.LastName);
                OnPropertyChanged(EventArgsCache.FullName);
            }
        }
    }

    protected virtual void OnPropertyChanged(PropertyChangedEventArgs args)
    {
        PropertyChanged?.Invoke(args);
    }
}


Твой вариант возможен как использование внешнего файла. Возможно в будущем добавят анлоги неерлевских макросов. Или файлы типа блазоровских для HTML
Re[7]: [C#] горшочек, не вари
Здравствуйте, Silver_S, Вы писали:
S_S>Например:
S_S>
S_S>property[MyStyle1] string? Location
S_S>{
S_S>    //...before
S_S>    _location = value;
S_S>    //...after
S_S>}
S_S>


Здесь проблема, что SG не может модифицировать существующий код

Для римера PropertyChanged.SourceGenerator
А вот такой легко превращает из полей свойства и методы
using PropertyChanged.SourceGenerator;
public partial class MyViewModel
{
    [Notify] private string _lastName;
    public string FullName => $"Dr. {LastName}";
}



partial class MyViewModel : INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged;

    public string LastName
    {
        get => _lastName;
        set
        {
            if (!EqualityComparer<string>.Default.Equals(_lastName, value))
            {
                _lastName = value;
                OnPropertyChanged(EventArgsCache.LastName);
                OnPropertyChanged(EventArgsCache.FullName);
            }
        }
    }

    protected virtual void OnPropertyChanged(PropertyChangedEventArgs args)
    {
        PropertyChanged?.Invoke(args);
    }
}


Твой вариант возможен как использование внешнего файла. Возможно в будущем добавят анлоги неерлевских макросов. Или файлы типа блазоровских для HTML
https://github.com/dotnet/roslyn/blob/main/docs/features/source-generators.cookbook.md?ysclid=m34mdrgmtm121143934