Как установить значение по умолчанию для нового свойства профиля для существующих пользователей в ASP.NET?

Я добавил новое логическое свойство в свой класс профиля.

Однако я не могу найти способ, чтобы это значение было истинным по умолчанию.

Profile.ShowDocumentsNotApplicable

возвращает false, если явно не установлено значение true...

содержимое web.config:

<!-- snip -->
<profile inherits="Company.Product.CustomerProfile">
  <providers>
    <clear />
    <add name="AspNetSqlProfileProvider" type="System.Web.Profile.SqlProfileProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" connectionStringName="ApplicationServices" applicationName="/" />
  </providers>
</profile>
<!-- snap -->

Профиль пользователя:

public class CustomerProfile: ProfileBase
{
    private bool _showDocumentsNotApplicable = true;

    public bool ShowDocumentsNotApplicable
    {
        get { return Return("ShowDocumentsNotApplicable", _showDocumentsNotApplicable); }
        set { Set("ShowDocumentsNotApplicable", value, () => _showDocumentsNotApplicable = value); }
    }

    private T Return<T>(string propertyName, T defaultValue)
    {
        try
        {
            return (T)base[propertyName];
        }
        catch (SettingsPropertyNotFoundException)
        {
            return defaultValue;
        }
    }

    private void Set<T>(string propertyName, T setValue, System.Action defaultAction)
    {
        try
        {
            base[propertyName] = setValue;
        }
        catch (SettingsPropertyNotFoundException)
        {
            defaultAction();
        }
    }
}

person janv8000    schedule 30.04.2013    source источник


Ответы (1)


С булевыми свойствами вы часто обнаружите, что они могут быть выражены любым способом. Я считаю, что лучше всего использовать их в зависимости от того, что делает «false» значением по умолчанию. Итак, если по умолчанию вы хотите, чтобы Profile.ShowDocumentsNotApplicable было правдой, я бы назвал его Profile.HideDocumentsNotApplicable, для которого значение по умолчанию равно false. Причина этого в том, что компилятор устанавливает для неинициализированных логических значений значение false; имеет смысл иметь значения по умолчанию вашей логики, соответствующие значениям по умолчанию компилятора.

Если обратный вариант менее подходит (например, вы всегда используете !Profile.HideDocumentsNotApplicable и считаете, что это снижает читабельность), вы можете сделать следующее:

public class CustomerProfile: ProfileBase
{
    private bool _hideDocumentsNotApplicable;
    public bool ShowDocumentsNotApplicable
    {
        get { return !_hideDocumentsNotApplicable); }
        set { _hideDocumentsNotApplicable = !value); }
    }

    //other stuff...
}
person anaximander    schedule 30.04.2013