对象引用未设置为对象错误消息的实例

时间:2012-08-01 13:49:32

标签: c# asp.net

我的代码出了什么问题?我最近发布了一个关于Calculation in code behind的问题,我尝试了Vinoth的答案,但它在这一行上给了我一个错误:

bool isChaffeurUsed = (bool)Session["IsChaffeurUsed"];

错误消息是:对象引用未设置为对象的实例。

请告诉我该怎么办。非常感谢,祝你有个美好的一天。

7 个答案:

答案 0 :(得分:4)

Session["IsChaffeurUsed"]

未定义 - 您未使用键IsChaffeurUsed

设置任何会话变量

你需要检查它是否先设置,

bool isChaffeurUsed;

if(Session["IsChaffeurUsed"] != null)
    isChaffeurUsed = (bool)Session["IsChaffeurUsed"];

答案 1 :(得分:3)

您需要先检查对象,然后尝试:

var isChaffeurUsed = false;

if (Session["IsChaffeurUsed"] != null)
{
    isChaffeurUsed  = bool.Parse(Session["isChaffeurUsed"].ToString());
}

答案 2 :(得分:3)

错误是试图告诉您Session["IsChaffeurUsed"]不存在。

如果您知道默认值,则可以将语句更改为:

bool isChaffeurUsed = (bool)(Session["IsChaffeurUsed"] ?? false)

或者,如果您想允许空值(这表示该值未专门设置为任何值),您可以使用可空类型:

bool? isChaffeurUsed = (bool?)Session["IsChaffeurUsed"];

答案 3 :(得分:1)

最有可能的是,Session中没有名称为"IsChaffeurUsed"的任何内容。

答案 4 :(得分:1)

如果Session为null或者在Session中找不到IsChaffeurUsed,您将获得该异常。会话可能不为空,因此问题可能是找不到IsChaffeurUsed。

如果未设置IsChaffeurUsed,您需要决定该怎么做。例如,你可以假设它是假的:

bool isChaffeurUsed = Session["IsChaffeurUsed"] == null ? false 
     : (bool)Session["IsChaffeurUsed"];

答案 5 :(得分:0)

由于这个原因,存在TryParse()方法:

bool.TryParse(Session["IsChaffeurUsed"], out isChaffeurUsed)

答案 6 :(得分:0)

关于查看会话变量的一件事是,在初始读取之后变量可能会消失(这在某些情况下发生在我身上)。这通常是我在处理ASP应用程序中查看会话/缓存变量时使用的模式:

object o = null;
if((o = Session["IsChaffeurUsed"]) != null)
{
    // Do something with o: bool.Parse, (bool), etc...
}