Можно ли передать свойство как параметр ref в сеттере? c# (избегайте «свойство или индексатор не могут передаваться как параметр out или ref».) - PullRequest
1 голос
/ 06 августа 2020

У меня есть этот код:

private int _someProperty;
public int SomeProperty
{
    get => _someProperty;
    set => SetProperty(ref _someProperty, value);
}

private void SetProperty<T>(ref T field, T value)
{
    if (!field.Equals(value))
    {
        field = value;
    }
}

Мне нужен SetProperty<T>, потому что мне нужен набор logi c в большом классе с множеством свойств, и этот logi c применяется ко всем из них. Код работает для случая, когда _someProperty является переменной. Но в моем случае это не работает, потому что я ссылаюсь на другое свойство вложенного класса, поэтому я получаю ошибку компиляции: «свойство или индексатор не могут быть переданы как параметр out или ref».

Поскольку свойства - это методы под капотом, я попробовал что-то вроде:

private setProperty<T>(ref Action<T> property, T value) {
    //meaningful code
}

Но я все равно получаю ошибку компиляции.

Есть ли прямой способ передать свойство по ссылке для прямого решения эта проблема как-то?

1 Ответ

4 голосов
/ 06 августа 2020

Нет, в основном.

Там - это потенциальная лазейка вокруг изменяемых свойств, возвращающих ссылки, только для получения, но это, вероятно, вам не поможет, потому что:

  1. у вас не может быть установленного logi c в изменяемом свойстве, возвращающем ссылку, только для получения
  2. это абсурдно нишевый сценарий, который большинство разработчиков не знаю, существует, и никогда не нужно будет использовать :)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...