2012-08-01 53 views
0

我的代码有什么问题?我最近发布了一个问题关于Calculation in code behind,我试图Vinoth的答案,但它给了我一个错误在这行:未将对象引用设置为对象错误消息的实例

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

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

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

+1

所有答案都是正确的,但你也应该检查该值是一个布尔http://msdn.microsoft .com/en-us/library/system.boolean.tryparse.aspx – 2012-08-01 13:53:23

回答

3

你需要首先检查对象,尝试:

var isChaffeurUsed = false; 

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

没有定义 - 你没有设置任何会话变量与关键IsChaffeurUsed

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

bool isChaffeurUsed; 

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

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

如果你知道一个默认值,你可以改变的语句为:

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

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

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

最有可能的,你没有在任何Session的名称"IsChaffeurUsed"

1

如果Session为空或者在Session中未找到IsChaffeurUsed,您将得到该异常。会话可能不是空的,所以问题很可能是IsChaffeurUsed找不到。

如果未设置IsChaffeurUsed,则需要决定如何处理。例如,你可以认为它是假的:

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

的TryParse()方法,因为这个原因存在:

地看着会话变量
bool.TryParse(Session["IsChaffeurUsed"], out isChaffeurUsed) 
+0

如果是字符串,则使用TryParse。这听起来像他期待它是一个布尔值。 Session [X]返回一个他正在转换为布尔值的对象。在这种情况下没有理由进行字符串解析。 – 2012-08-01 15:11:14

+0

你认为推断/假定类型是安全的吗?如果这不是bool类型,试图将它转换为这样会产生未处理的异常。 – 2012-08-01 15:14:53

+0

我通常会有一段代码读取/写入会话中的值,通常是一个带有getter和setter的属性。在这种情况下,我认为它是安全的。如果有人在会话中使用相同的密钥输入不正确的值,那么我希望它引发异常。 如果我确实想要更宽容这种类型,那么我会使用Convert.ToBoolean而不是bool.TryParse。 – 2012-08-02 14:15:18

0

的一件事是,有一种可能性,变量将后消失最初的阅读(这在我身上发生过几次)。这通常是在ASP应用望着会话/缓存变量打交道时,我使用模式:下面

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