如何在if语句中将Session变量用作整数?

时间:2009-12-18 20:25:55

标签: c# .net asp.net asp.net-mvc

我有一个存储int的Session。我通常会做以下事情......

if(Session["test"] == null)

现在我正在比较......

public ActionResult NumbersGame(int myNum)
{
if(Session["test"] != myNum)...

我该怎么做?

5 个答案:

答案 0 :(得分:5)

(int)如果该会话变量为null或不是数字,则Session [“test”]将失败。请改用它......

var myNumber = Convert.ToInt32(Session["test"]);
如果'test'为null或不是数字

myNumber将为0

答案 1 :(得分:3)

将其转换为int:

if ((int) Session["test"] != myNum) ...

答案 2 :(得分:1)

检查和使用存储在Session()对象中的值的另一种方法是使用TryParse功能。

int intTest;
if (int.TryParse(Session["test"].ToString(), out intTest))
{
   // intTest will have the value in Session["Test"] stored as an integer

}

我喜欢它,因为它紧凑而简单。

答案 3 :(得分:1)

简单概述我将如何做到:

它也可以解决其他问题:

首先我们定义接口:

public interface ISessionWrapper
{
    int? SomeInteger { get; set; }
}

然后我们进行HttpContext实现:

public class HttpContextSessionWrapper : ISessionWrapper
{
    private T GetFromSession<T>(string key)
    {
        return (T) HttpContext.Current.Session[key];
    }

    private void SetInSession(string key, object value)
    {
        HttpContext.Current.Session[key] = value;
    }

    public int? SomeInteger
    {
        get { return GetFromSession<int?>("SomeInteger"); }
        set { SetInSession("SomeInteger", value); }
    }
}

然后我们定义我们的基本控制器:

public class BaseController : Controller
{
    public ISessionWrapper SessionWrapper { get; set; }

    public BaseController()
    {
        SessionWrapper = new HttpContextSessionWrapper();
    }
}

最后:

public ActionResult NumbersGame(int myNum)
{           
    if (SessionWrapper.SomeInteger == myNum)
        //Do what you want;
}

不需要在这里施放!!如果你想测试你的控制器,你对Session没有任何问题。你只需模拟ISessionWrapper并将其传递给SessionWrapper变量。

答案 4 :(得分:0)

我会测试null(检测Session expiry),然后执行:

object value = Session["test"];
if (value == null)
{
    // The value is not in Session (e.g. because the session has expired)
    // Deal with this in an application-specific way, e.g. set to a default,
    // reload the Session variable from the database, redirect to a home page, ...
    ...
}
else
{
    myNumber = (int) value;
}
...

使用Convert.ToInt32的问题是,如果你的会话已经过期,它只会返回0,这可能是不可取的,具体取决于你的应用程序。