Авто-свойства: проверка / проверка во время набора

Я думаю, мы все можем согласиться с тем, что автоматические свойства в C # 3.0 великолепны. Что-то вроде этого:

private string name;
public string Name
{
    get { return name; }
    set { name = value; }
}

Сводится к этому:

public string Name { get; set; }

Прекрасный!

Но что мне делать, если я хочу, скажем, преобразовать строку Name с помощью метода ToUpperInvariant () при «настройке». Нужно ли мне вернуться к старому стилю создания свойств C # 2.0?

    private string name;
    public string Name
    {
        get { return name; }
        set { name = value.ToUpperInvariant(); }
    }

Или есть более элегантный способ добиться этого?


person Pretzel    schedule 20.07.2010    source источник
comment
Боюсь, вы застряли на пути C # 2.0.   -  person ChaosPandion    schedule 20.07.2010
comment
Я бы сказал, что изменение значения таким образом, что внешний вызывающий абонент не получит то же значение, которое было установлено, является побочным эффектом и нежелательным (например: string s = blah; foo.Name = s; (foo.Name == s) иногда является ложным, что неожиданно для потребителя вашего класса) Вероятно, вам следует оставить его как автоматическое свойство и выполнить ToUpperInvariant (); внутренне, когда вам нужно его использовать, или предоставить частное свойство только с геттером, который выполняет ToUpperInvariant ().   -  person David    schedule 20.07.2010
comment
@ Дэвид: Та же мысль пришла мне в голову. Я все еще не решил, каким образом я хочу, чтобы он работал. В конкретном случае, над которым я сейчас работаю, я имею дело со штрих-кодами, которые в основном являются цифрами, но содержат 2 алфавитных символа. На самом деле не имеет значения, прописные они или строчные буквы или нет, но было бы неплохо, если бы они были все в верхнем регистре, все время. Так что я думаю, что меня устраивает побочный эффект, который вы описываете. Но в целом я думаю, что согласен с вашей оценкой. Спасибо за совет.   -  person Pretzel    schedule 20.07.2010


Ответы (1)


Да, нужно конвертировать обратно. Автосвойство не может проводить такие проверки.

person tanascius    schedule 20.07.2010
comment
Спасибо за подтверждение! В каждой ссылке, которую я когда-либо читал об Auto-Properties, ничего об этом не упоминалось. Казалось, это подразумевалось в том, как были написаны некоторые статьи и книги, но никогда прямо не говорилось, что это действительно так. Еще раз спасибо за подтверждение моих подозрений. - person Pretzel; 20.07.2010
comment
Похоже, моя награда Зеленым чеком подтолкнула вас к 10К. Поздравляю! Теперь вы можете модерировать. : D Пожалуйста, будьте добры ко всем нам, подчиненным ...: O - person Pretzel; 20.07.2010
comment
@Pretzel: Спасибо, вы правы, это был ваш зеленый чек ^^, который был долгим, чтобы получить эти 10K. - person tanascius; 20.07.2010