当前位置:  开发笔记 > 编程语言 > 正文

在C#中确定会话变量的最佳方法是null还是empty?

如何解决《在C#中确定会话变量的最佳方法是null还是empty?》经验,为你挑选了4个好方法。

在ASP.NET C#中检查会话变量是否存在的最佳方法是什么?

我喜欢使用String.IsNullOrEmpty字符串的作品,并想知道是否有类似的方法Session.目前我所知道的唯一方法是:

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

Rob Cooper.. 111

继续其他人所说的话.我倾向于有两层:

核心层.这是在几乎所有Web应用程序项目中添加的DLL中.在这里我有一个SessionVars类,它为Session状态getter/setter做了笨拙的工作.它包含如下代码:

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(string key)
    {
        if (Session[key] == null)
            return default(T);
        else
            return (T)Session[key];
    }

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

请注意获取任何类型的泛型.

然后我还为特定类型添加Getters/Setter,特别是字符串,因为我经常更喜欢使用string.Empty而不是null来呈现给用户的变量.

例如:

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

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

等等...

然后我创建了包装器以将其抽象出来并将其引入应用程序模型.例如,如果我们有客户详细信息:

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

你明白了吗?:)

注意:在为接受的答案添加评论时只是想一想.使用状态服务器时,始终确保将对象存储在Session中时可以序列化.在Web场上尝试使用泛型保存对象并且它会变得繁荣,这很容易.我在工作中部署在Web服务器场上,因此在核心层中添加了对我的代码的检查,以查看该对象是否可序列化,封装Session Getters和Setters的另一个好处:)



1> Rob Cooper..:

继续其他人所说的话.我倾向于有两层:

核心层.这是在几乎所有Web应用程序项目中添加的DLL中.在这里我有一个SessionVars类,它为Session状态getter/setter做了笨拙的工作.它包含如下代码:

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(string key)
    {
        if (Session[key] == null)
            return default(T);
        else
            return (T)Session[key];
    }

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

请注意获取任何类型的泛型.

然后我还为特定类型添加Getters/Setter,特别是字符串,因为我经常更喜欢使用string.Empty而不是null来呈现给用户的变量.

例如:

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

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

等等...

然后我创建了包装器以将其抽象出来并将其引入应用程序模型.例如,如果我们有客户详细信息:

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

你明白了吗?:)

注意:在为接受的答案添加评论时只是想一想.使用状态服务器时,始终确保将对象存储在Session中时可以序列化.在Web场上尝试使用泛型保存对象并且它会变得繁荣,这很容易.我在工作中部署在Web服务器场上,因此在核心层中添加了对我的代码的检查,以查看该对象是否可序列化,封装Session Getters和Setters的另一个好处:)



2> Ely..:

这就是你如何做到的.但是,您可以使用更短的语法.

sSession = (string)Session["variable"] ?? "set this";

这是说如果会话变量为null,则将sSession设置为"set this"



3> Greg Ogle..:

将它包装在属性中可能会使事情变得更加优雅.

string MySessionVar
{
   get{
      return Session["MySessionVar"] ?? String.Empty;
   }
   set{
      Session["MySessionVar"] = value;
   }
}

然后你可以把它当作一个字符串.

if( String.IsNullOrEmpty( MySessionVar ) )
{
   // do something
}



4> Aaron Palmer..:

c#3.0中的"as"符号非常干净.由于所有会话变量都是可空对象,因此您可以获取该值并将其放入您自己的类型变量中,而无需担心抛出异常.大多数对象都可以这样处理.

string mySessionVar = Session["mySessionVar"] as string;

我的概念是你应该将Session变量拉入局部变量,然后适当地处理它们.始终假设您的Session变量可以为null,并且永远不会将它们转换为非可空类型.

如果您需要一个不可为空的类型变量,那么您可以使用TryParse来获取它.

int mySessionInt;
if (!int.TryParse(mySessionVar, out mySessionInt)){
   // handle the case where your session variable did not parse into the expected type 
   // e.g. mySessionInt = 0;
}

推荐阅读
低调pasta_730
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有