-1

以下如何产生“无效的强制转换异常”???

foreach (KeyValuePair<String,Object> entry in HttpRuntime.Cache)
{
    if (entry.Value.GetType() == typeof(MyClass))
    {
        MyClass mc = (MyClass)entry.Value; // ===> Invalid Cast Exception !!!

(对于那些问我为什么要这样做的人:我在缓存中/从缓存中随机添加和删除一些不同的对象,因此需要进行这种测试。我计划创建某种容器对象来保存我的各种对象;我只会将这个对象推送到缓存中,但问题仍然存在:它会解决强制转换异常吗?)

4

3 回答 3

1

您是否处于进行动态(重新)编译的环境中?例如,如果代码文件发生更改,ASP.NET 网站会在运行时重新编译页面。他们将该页面编译为程序集并加载该程序集。即使运行时在某个时候卸载旧程序集,这仍然会为您提供与旧程序集不兼容的新类型。

我不知道,您是否可以通过某种版本控制或强命名来解决此问题。但由于发生了变化,似乎不太可能,你会想要旧的类型。

于 2012-05-22T09:07:33.467 回答
0

不知道为什么您的代码会失败,但您可以使用“软广播”来尝试:

foreach (KeyValuePair<String,Object> entry in HttpRuntime.Cache) 
{ 
     MyClass mc = entry.Value as MyClass;
     if (mc != null)     
     {         
          //Do your stuff
于 2012-05-22T09:09:41.020 回答
0

好的,我终于成功了。

首先,我很抱歉,我错误地阅读了我的日志文件。异常没有出现

MyClass mc = (MyClass)entry.Value;

但从

foreach (KeyValuePair<String,Object> entry in HttpRuntime.Cache)

看来缓存不能用 KeyValuePair (我在互联网上找到的代码......)进行迭代。再一次,很抱歉浪费您的时间在错误的方向搜索......无论如何感谢您的帮助!

现在对于有效的代码:

IDictionaryEnumerator CacheEnum = HttpRuntime.Cache.GetEnumerator();
    while (CacheEnum.MoveNext()) {
        MyClass mc = ((DictionaryEntry)CacheEnum.Current).Value as MyClass;
        if (mc != null) {
            // Doing stuff...
于 2012-05-22T19:03:58.433 回答