Цикл через httpcache c # - PullRequest
       16

Цикл через httpcache c #

6 голосов
/ 21 ноября 2011

В VB.NET я могу сделать что-то вроде этого, чтобы записать все ключи в кеше:

Dim oc As HttpContext = HttpContext.Current

For Each c As Object In oc.Cache
    oc.Response.Write(c.Key.ToString())
Next

Хотя .Key не появляется в Intellisense, код работает просто отлично.

Как мне сделать то же самое в c #?

HttpContext oc = HttpContext.Current;
foreach (object c in oc.Cache) 
{
    oc.Response.Write(c.key.ToString());
}

. Не нравится .key.немного.Я в недоумении здесь.Любые идеи, как получить доступ к ключу таким образом?

Ответы [ 2 ]

11 голосов
/ 21 ноября 2011

Почти верно - это заглавная K для Key, не строчная. C # чувствителен к регистру.

Кроме того, object не имеет члена Key. В C # вы также можете использовать неявный вывод типа с ключевым словом var. Это будет работать, если базовый выведенный тип имеет Key член:

HttpContext oc = HttpContext.Current;

foreach (var c in oc.Cache) 
{
    oc.Response.Write(c.Key.ToString());
}

В этом случае Cache не имеет члена Key, поэтому вам нужно копать глубже, используя IDictionaryEnumerator, возвращенный методом GetEnumerator Cache:

HttpContext oc = HttpContext.Current;

IDictionaryEnumerator en = oc.Cache.GetEnumerator();
while(en.MoveNext())
{
    oc.Response.Write(en.Key.ToString());
}
9 голосов
/ 21 ноября 2011

Ниже код работает мгновенно:

HttpContext oc = HttpContext.Current;
foreach (var c in oc.Cache)        
{
   oc.Response.Write(((DictionaryEntry)c).Key.ToString());
}

Спасибо за ваше время

...