1. ホーム
  2. c#

C#でセッション変数がNULLまたは空であることを判断する最良の方法は何ですか?

2023-08-08 08:08:24

質問

ASP.NET C#でセッション変数の存在を確認する最も良い方法は何ですか?

私は好きで String.IsNullOrEmpty() を使うのが好きなのですが、同じような方法で Session . 現在、私が知っている唯一の方法は。

 var session;
 if (Session["variable"] != null)
 {
     session = Session["variable"].ToString();
 }
 else
 {
     session = "set this";
     Session["variable"] = session;
 }

どのように解決するのですか?

他の方がおっしゃったことを踏襲すると 私は2層式にすることが多いです。

コア層。これはほとんどすべてのウェブアプリのプロジェクトに追加される DLL の中にあります。 . この中にSessionVarsクラスがあり、Session状態のゲッター/セッターのためにgrunt作業を行います。これは以下のようなコードを含んでいます。

public class SessionVar
{
    static HttpSessionState Session
    {
        get
        {
            if (HttpContext.Current == null)
                throw new ApplicationException("No Http Context, No Session to Get!");

            return HttpContext.Current.Session;
        }
    }

    public static T Get<T>(string key)
    {
        if (Session[key] == null)
            return default(T);
        else
            return (T)Session[key];
    }

    public static void Set<T>(string key, T value)
    {
        Session[key] = value;
    }
}

任意の型を取得するためのジェネリックに注意してください。

それから、特定の型、特に文字列のためのゲッター/セッターを追加します。なぜなら、私はしばしばユーザーに提示される変数に対してnullではなくstring.Emptyで作業することを好むからです。

public static string GetString(string key)
{
    string s = Get<string>(key);
    return s == null ? string.Empty : s;
}

public static void SetString(string key, string value)
{
    Set<string>(key, value);
}

などなど...

そして、それを抽象化してアプリケーションモデルまで持ってくるためのラッパーを作成します。例えば、顧客の詳細があるとします。

public class CustomerInfo
{
    public string Name
    {
        get
        {
            return SessionVar.GetString("CustomerInfo_Name");
        }
        set
        {
            SessionVar.SetString("CustomerInfo_Name", value);
        }
    }
}

お分かり頂けましたでしょうか?)

注意 ただ、受理された回答にコメントを追加する際に思いついたことがあります。状態サーバーを使用するとき、セッションにそれらを格納するとき、常にオブジェクトがシリアライズ可能であることを確認します。Webファームでジェネリックスを使用してオブジェクトを保存しようとすると、それが爆発するのはあまりにも簡単なことです。私は仕事でWebファームにデプロイしているので、オブジェクトがシリアライズ可能かどうかを確認するためにコア層で私のコードにチェックを加えました。)