我的代码有什么问题?我最近发布了一个问题关于Calculation in code behind,我试图Vinoth的答案,但它给了我一个错误在这行:未将对象引用设置为对象错误消息的实例
bool isChaffeurUsed = (bool)Session["IsChaffeurUsed"];
错误消息是:对象引用不设置到对象的实例。
请告诉我该怎么做。非常感谢,祝你有美好的一天。
我的代码有什么问题?我最近发布了一个问题关于Calculation in code behind,我试图Vinoth的答案,但它给了我一个错误在这行:未将对象引用设置为对象错误消息的实例
bool isChaffeurUsed = (bool)Session["IsChaffeurUsed"];
错误消息是:对象引用不设置到对象的实例。
请告诉我该怎么做。非常感谢,祝你有美好的一天。
你需要首先检查对象,尝试:
var isChaffeurUsed = false;
if (Session["IsChaffeurUsed"] != null)
{
isChaffeurUsed = bool.Parse(Session["isChaffeurUsed"].ToString());
}
Session["IsChaffeurUsed"]
没有定义 - 你没有设置任何会话变量与关键IsChaffeurUsed
你需要检查它是否首先设置,
bool isChaffeurUsed;
if(Session["IsChaffeurUsed"] != null)
isChaffeurUsed = (bool)Session["IsChaffeurUsed"];
错误是试图告诉你,Session["IsChaffeurUsed"]
不存在。
如果你知道一个默认值,你可以改变的语句为:
bool isChaffeurUsed = (bool)(Session["IsChaffeurUsed"] ?? false)
或者,如果你想允许空值(这表示该值没有专门设置为任意值),你可以使用可空类型:
bool? isChaffeurUsed = (bool?)Session["IsChaffeurUsed"];
最有可能的,你没有在任何Session
的名称"IsChaffeurUsed"
。
如果Session为空或者在Session中未找到IsChaffeurUsed,您将得到该异常。会话可能不是空的,所以问题很可能是IsChaffeurUsed找不到。
如果未设置IsChaffeurUsed,则需要决定如何处理。例如,你可以认为它是假的:
bool isChaffeurUsed = Session["IsChaffeurUsed"] == null ? false
: (bool)Session["IsChaffeurUsed"];
的TryParse()方法,因为这个原因存在:
地看着会话变量bool.TryParse(Session["IsChaffeurUsed"], out isChaffeurUsed)
如果是字符串,则使用TryParse。这听起来像他期待它是一个布尔值。 Session [X]返回一个他正在转换为布尔值的对象。在这种情况下没有理由进行字符串解析。 – 2012-08-01 15:11:14
你认为推断/假定类型是安全的吗?如果这不是bool类型,试图将它转换为这样会产生未处理的异常。 – 2012-08-01 15:14:53
我通常会有一段代码读取/写入会话中的值,通常是一个带有getter和setter的属性。在这种情况下,我认为它是安全的。如果有人在会话中使用相同的密钥输入不正确的值,那么我希望它引发异常。 如果我确实想要更宽容这种类型,那么我会使用Convert.ToBoolean而不是bool.TryParse。 – 2012-08-02 14:15:18
的一件事是,有一种可能性,变量将后消失最初的阅读(这在我身上发生过几次)。这通常是在ASP应用望着会话/缓存变量打交道时,我使用模式:下面
object o = null;
if((o = Session["IsChaffeurUsed"]) != null)
{
// Do something with o: bool.Parse, (bool), etc...
}
所有答案都是正确的,但你也应该检查该值是一个布尔http://msdn.microsoft .com/en-us/library/system.boolean.tryparse.aspx – 2012-08-01 13:53:23