以下内容如何产生"无效的强制转换异常" ???
foreach (KeyValuePair<String,Object> entry in HttpRuntime.Cache)
{
if (entry.Value.GetType() == typeof(MyClass))
{
MyClass mc = (MyClass)entry.Value; // ===> Invalid Cast Exception !!!
(对于那些问我为什么要这样做的人:我在缓存中随机添加和删除一些不同的对象,因此需要进行这种测试。我打算创建某种容器对象,将保存我的各种对象;我只会在缓存中推送此对象,但问题仍然存在:是否会解决强制转换异常?)
答案 0 :(得分:1)
您是否处于动态(重新)编译的环境中?例如,ASP.NET网站在代码文件更改时会在运行时重新编译页面。他们将该页面编译为程序集并加载该程序集。即使运行时在某个时刻卸载旧的程序集,这仍然会为您提供一个与旧程序集不兼容的新类型。
我不知道,如果您可以通过某种版本控制或强命名来解决这个问题。 但是,由于发生了变化,似乎不太可能,你想要旧的类型。
答案 1 :(得分:0)
不知道为什么你的代码失败了,但你可以尝试使用'softcast':
foreach (KeyValuePair<String,Object> entry in HttpRuntime.Cache)
{
MyClass mc = entry.Value as MyClass;
if (mc != null)
{
//Do your stuff
答案 2 :(得分:0)
好的,我终于成功了。
首先,我道歉,我错误地读了我的日志文件。 但来自 看起来Cache不能用KeyValuePair(我在互联网上找到的代码......)进行迭代。再一次,抱歉浪费你的时间在错误的方向搜索...无论如何,谢谢你的帮助! 现在对于有效的代码:MyClass mc = (MyClass)entry.Value;
foreach (KeyValuePair<String,Object> entry in HttpRuntime.Cache)
IDictionaryEnumerator CacheEnum = HttpRuntime.Cache.GetEnumerator();
while (CacheEnum.MoveNext()) {
MyClass mc = ((DictionaryEntry)CacheEnum.Current).Value as MyClass;
if (mc != null) {
// Doing stuff...