检查null HttpContext.Current.Cache值

时间:2014-04-16 20:18:34

标签: c# .net httpcontext.cache

在下面的代码片段中,如果缓存值尚不存在,我正在尝试分配缓存值。运行以下内容时出现 Object_reference_not_set_to_an_instance_of_an_object 错误。我错过了什么?

if (string.IsNullOrEmpty(HttpContext.Current.Cache[Key].ToString()))
                HttpContext.Current.Cache[Key] = data;

我环顾四周但却找不到类似的东西。也许我只是没有正确写出我的问题。

5 个答案:

答案 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.CurrentHttpContext.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}}。