系统.HttpContext.Current静态变量中的NullReferenceException

本文关键字:NullReferenceException 变量 静态 HttpContext Current 系统 | 更新日期: 2023-09-27 18:06:46

我有一个自定义类User

public class User
{
    public string UserId { get; set; }
    public string LesseeCode { get; set; }
    public string ClientId { get; set; }
    public string VehicleId { get; set; }
    public string Status { get; set; }
    public string UnitDesc { get; set; }
    public string ItemId { get; set; }
    public string Category { get; set; }
    public string Type { get; set; }
    public double Amount { get; set; }
}

当我尝试在这里定义一个新用户

public static User currentUser = (HttpContext.Current.Session["User"] == null) ? (User)HttpContext.Current.Session["User"] : new User();

我得到一个System.NullReferenceException错误,我读到这通常是由一个不可空的变量引起的,要么不被定义,要么被定义为空,但是根据我如何定义currentUser,应该没有办法让它为空?

系统.HttpContext.Current静态变量中的NullReferenceException

您需要反转truefalse的结果,或者反转运算符。我认为两者中比较容易的是将==更改为!=

public static User currentUser = (HttpContext.Current.Session["User"] == null) ? (User)HttpContext.Current.Session["User"] : new User();
                                               you want this to be != ^^

当前你说的是

如果HttpContext.Current

。如果会话["User"]为空,则将其分配给currentUser,否则创建一个新用户。

所以你总是有一个空用户或一个新用户

因为currentUserstatic,不知何故,它的值在HttpContext.Current.Session存在之前得到评估!

您还应该将==更改为!=

currentUser = (HttpContext.Current.Session["User"] != null) ? (User)HttpContext.Current.Session["User"] : new User();

或者改变第二个和第三个操作数的顺序

currentUser = (HttpContext.Current.Session["User"] == null) ? new User() : (User)HttpContext.Current.Session["User"];