0

プロファイル クラスに新しいブール プロパティを追加しました。

ただし、デフォルトで値をtrueにする方法が見つからないようです。

Profile.ShowDocumentsNotApplicable

明示的に true に設定されていない場合は false を返します...

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();
        }
    }
}
4

1 に答える 1

1

ブール型のプロパティでは、どちらの方法でも表現できることがよくあります。どちらの方法でも「false」がデフォルトになるようにするのがベストプラクティスだと思います。したがって、デフォルトProfile.ShowDocumentsNotApplicableで true にしたい場合は、それを と呼びProfile.HideDocumentsNotApplicableます。デフォルトは false です。この理由は、コンパイラが初期化されていない bool を false に設定するためです。ロジックのデフォルトをコンパイラのデフォルトと一致させることは理にかなっています。

逆があまり適していない場合 (たとえば、常に使用!Profile.HideDocumentsNotApplicableしていて、これが読みやすさを低下させることがわかっている場合)、次のようにすることができます。

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

    //other stuff...
}
于 2013-04-30T12:33:32.893 に答える