【问题标题】:Looping through httpcache c#循环通过httpcache c#
【发布时间】:2012-01-02 20:59:48
【问题描述】:

在 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。少量。我在这里不知所措。任何想法如何以这种方式访问​​密钥?

【问题讨论】:

    标签: c# asp.net vb.net-to-c#


    【解决方案1】:

    几乎正确 - 它是 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 成员,因此您需要更深入地挖掘,使用CacheGetEnumerator 方法返回的IDictionaryEnumerator

    HttpContext oc = HttpContext.Current;
    
    IDictionaryEnumerator en = oc.Cache.GetEnumerator();
    while(en.MoveNext())
    {
        oc.Response.Write(en.Key.ToString());
    }
    

    【讨论】:

    • 我无法让它为我工作,仍然无法编译并且仍然抱怨 .Key 尽管在 foreach 和 .Key 大写中更改为 var 。 “错误 6 'object' 不包含 'Key' 的定义,并且找不到接受 'object' 类型的第一个参数的扩展方法 'Key'(您是否缺少 using 指令或程序集引用?”
    • 好的,我想我已经明白了。我可以通过这种方法做同样的事情:IDictionaryEnumerator enumerator = oc.Cache.GetEnumerator(); while (enumerator.MoveNext()) { oc.Response.Write(enumerator.Key.ToString()); }
    • 抱歉@downvoter 是针对我的吗?我用打勾标记正确答案的原因是您的答案最初是不正确的。当我指出这一点时,您更正了它(10.54),但它仍然不是一个有效的答案。然后我自己从谷歌搜索中找到了一个答案并将其发布为评论(11.05)。然后你调整了你的答案而不相信它。所以总而言之,你的答案是错误的,没有经过测试,当你从我这里复制它时你才得到正确的答案。你给出很多答案很好,但除非你是准确的,否则它没有多大用处。希望此反馈对您有所帮助。
    【解决方案2】:

    下面的代码快照工作正常:

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

    感谢您的宝贵时间

    【讨论】:

      猜你喜欢
      • 2016-01-05
      • 2017-04-27
      • 1970-01-01
      • 2014-04-27
      • 1970-01-01
      • 2013-03-13
      • 1970-01-01
      • 1970-01-01
      • 2022-01-07
      相关资源
      最近更新 更多