В C # можно ли заставить auto-property выполнять некоторую дополнительную работу с помощью атрибута? - PullRequest
8 голосов
/ 04 июня 2010

Этот вопрос связан, но не совпадает с этим: Как задать для свойства C # свойство по умолчанию?

Я люблю авто-свойства, но иногда мне приходится делать что-то вроде этого:

private string someName;

public string SomeName
{
    get
    {
       return someName;
    }

    set
    {
        someName = value.Trim();
    }
}

Если мне приходится делать одно и то же много раз, я начинаю хотеть, чтобы мне не нужно было набирать столько строк / символов кода. Я хочу иметь возможность перехватить значение и изменить его примерно так:

public string Somename
{
    get;

    [Trim]
    set;
}

Есть ли способ сделать что-то подобное? Было бы глупо? Есть ли способ лучше? Любые другие общие комментарии? Признаюсь, пример, который я привел, немного гипотетичен, и я не могу сейчас найти точный код, который заставил меня задуматься об этом.

Спасибо.

Ответы [ 2 ]

5 голосов
/ 04 июня 2010

Нет, нет способа сделать это. C # auto свойства предназначены для того, чтобы быть синтаксическим сахаром только для самых тривиальных свойств и ничего более.

4 голосов
/ 04 июня 2010

Вы можете сделать это с помощью AOP, как с Postsharp , но почему бы вам не использовать в этом случае резервное хранилище?

Также, для полноты, вам, вероятно, следует сделать следующее:

someName = (value ?? string.Empty).Trim();

для обработки null.

Обратите внимание, что если вы имеете в виду конкретный случай, когда требуется больше работы, вам, вероятно, следует спросить об этом случае, а не о тривиальном, который у вас есть в вашем вопросе

...