2011-02-01 7 views
9

안녕하세요,캐시 (System.Web.Cache)에 항목이 있는지 확인하는 방법?

키가 이미 캐시에 있는지 확인하려면 다음을 수행 할 수 있어야합니다.

if(Cache["MyKey"] != null) 

그러나 작동하지 않습니까? 캐시 클래스에서 인스턴스를 만들면이 방법으로 객체를 가져올 수 있습니다.

cache.Get("MyKey") or cache["MyKey"] 

그러나 다음과 같이 null을 확인하더라도

if(cache["MyKey"] != null) 

NullRefException이 발생합니다.

내가 뭘 잘못하고 있니?

편집 1 :

이것은 내가 캐시를 instansiate하는 방법입니다.

private Cache cache 
     { 
      get { 
       if (_cache == null) 
        _cache = new Cache(); 
       return _cache; } 
     } 
+0

Cache 인스턴스를 어떻게 인스턴스화합니까? 캐시 객체 자체가 NRE를 던지는 키가 아닙니다. – Victor

+0

편집을 참조하십시오. – Banshee

답변

27

을 특정 키의 객체가 캐시에 있는지 여부를 테스트하는 방법입니다 instansiate 방법이다. 따라서

if(Cache["MyKey"] != null) 

이 맞습니다.

그러나 새 Cache 객체를 인스턴스화해서는 안됩니다. 대신 System.Web.HttpContext.Current.Cache을 사용할 수 있습니다. 이것은 캐시의 인스턴스이며 응용 프로그램 도메인에 있습니다. MSDN에서

:이 클래스의

하나의 인스턴스는 응용 프로그램 도메인 당 생성하고, 응용 프로그램 도메인이 활성 상태로 유지 한 유효한 남아있다. 이 클래스의 인스턴스에 대한 정보는 HttpContext 개체의 Cache 속성 또는 Page 개체의 Cache 속성을 통해 사용할 수있는 입니다. 캐시 키 (.Contains 방법을 사용하여) 존재 여부를 여부를 확인 널 & 포스트없는 경우

+0

고마워, 나는 그것을 놓쳤다. – Banshee

0

당신은 확인해야합니다.

if (myCache != null && myCache.Contains("keyName") && myCache.Get("keyName") != null) 
     { 
      myDS = (DataSet)myCache.Get("keyName"); 
     } 
관련 문제