在下面的代码片段中,如果缓存值尚不存在,我正在尝试分配缓存值。运行以下内容时出现 Object_reference_not_set_to_an_instance_of_an_object 错误。我错过了什么?
if (string.IsNullOrEmpty(HttpContext.Current.Cache[Key].ToString()))
HttpContext.Current.Cache[Key] = data;
我环顾四周但却找不到类似的东西。也许我只是没有正确写出我的问题。
答案 0 :(得分:3)
HttpContext.Current可以为null。 HttpContext.Current.Cache [Key]可以为null。
如果其中任何一个为空,则会导致出现错误。
答案 1 :(得分:1)
您收到NullReferenceException,因为您尝试在ToString()
个实例上调用null
。
在致电HttpContext.Current.Cache[Key]
之前,您必须先检查null
是否为ToString()
if (HttpContext.Current.Cache[Key] == null)
{
HttpContext.Current.Cache[Key] = data;
}
答案 2 :(得分:1)
您应该在HttpContext.Current
和HttpContext.Current.Cache[Key]
上检查是否为空,两者都可以为空。这是一个可能的解决方案,只要您在HttpContext.Current
为空时未设置缓存密钥即可。
if (HttpContext.Current != null &&
(HttpContext.Current.Cache[Key] == null || string.IsNullOrEmpty(HttpContext.Current.Cache[Key].ToString()))
{
HttpContext.Current.Cache[Key] = data;
}
答案 3 :(得分:0)
我刚刚更改了“获取”值,转换为字符串,比较'获得价值的逻辑,看看它是否在前面是空的。傻我。
if (HttpContext.Current.Cache[Key] == null)
HttpContext.Current.Cache[Key] = data;
" Object_reference_not_set_to_an_instance_of_an_object 错误"实际上基本上是' null'我正在寻找的价值......
答案 4 :(得分:0)
如果他们的密钥不存在,那么这将返回null
:
HttpContext.Current.Cache[Key]
然后你盲目地调用ToString()
来自缓存的值,导致异常。
您需要将缓存中的值分配给临时变量,并在调用null
之前对其进行测试{<1}}。