向IList<T>添加对象会引发ArrayTypeMismatchException异常。

3

我有一个 IList<IHtmlString>,我想要添加一些元素到其中。最近它抛出了 ArrayTypeMismatchException 异常,但我不知道为什么。在访问或添加 HttpSessionStateBase 中的元素时也会发生此问题。

public class HtmlList 
{
  private IList<IHtmlString> _listItems = new List<IHtmlString>();

  public void Add(IHtmlString listItem)
  {
    if (listItem != null)
    {
      _listItems.Add(listItem); // here ArrayTypeMismatchException is thrown
    }
  }
}

有人能为我解释一下这是什么吗?为什么过去三年没有发生这种情况?我在从.NET 4.0更改到4.5后第一次遇到异常。
堆栈跟踪:
在 System.Collections.Generic.List`1.Add(T item)处
在 MyCompany.Web.Mvc.UI.HtmlList.Add(IHtmlString element)处
在 MyCompany.Web.Mvc.Models.CaptchaExtensions.CaptchaImageElement.ToString()处
在 MyCompany.Web.Mvc.Models.CaptchaExtensions.CaptchaImageElement.Render(Int32 width, Int32 height)处
在 ASP.views_teilnahme_index_aspx.__RenderContent3(HtmlTextWriter __w, Control parameterContainer)处
在 System.Web.UI.Control.RenderChildrenInternal(HtmlTextWriter writer, ICollection children)处
在 System.Web.UI.Control.RenderChildren(HtmlTextWriter writer)处
在 System.Web.UI.Control.Render(HtmlTextWriter writer)处
在 System.Web.UI.Control.RenderControlInternal(HtmlTextWriter writer, ControlAdapter adapter)处
在 System.Web.UI.Control.RenderControl(HtmlTextWriter writer, ControlAdapter adapter)处
在 System.Web.UI.Control.RenderControl(HtmlTextWriter writer)处
在 System.Web.UI.Control.RenderChildrenInternal(HtmlTextWriter writer, ICollection children)处
在 System.Web.UI.Control.RenderChildren(HtmlTextWriter writer)处
在 System.Web.UI.Control.Render(HtmlTextWriter writer)处
在 System.Web.UI.Control.RenderControlInternal(HtmlTextWriter writer, ControlAdapter adapter)处
在 System.Web.UI.Control.RenderControl(HtmlTextWriter writer, ControlAdapter adapter)处
在 System.Web.UI.Control.RenderControl(HtmlTextWriter writer)处
在 System.Web.UI.Control.RenderChildrenInternal(HtmlTextWriter writer, ICollection children)处
在 System.Web.UI.Control.RenderChildren(HtmlTextWriter writer)处
在 System.Web.UI.Page.Render(HtmlTextWriter writer)处
在 System.Web.Mvc.ViewPage.Render(HtmlTextWriter writer)处
在 System.Web.UI.Control.RenderControlInternal(HtmlTextWriter writer, ControlAdapter adapter)处
在 System.Web.UI.Control.RenderControl(HtmlTextWriter writer, ControlAdapter adapter)处
在 System.Web.UI.Control.RenderControl(HtmlTextWriter writer)处
在 System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)处

7
这个听起来对我很奇怪。你能用一个简短但是完整的例子重现一下吗? - Jon Skeet
4
请贴出异常的完整堆栈跟踪。 - Daniel Hilgarth
2
@Knaģis:新实例会有什么不同?它仍将是类型为IList<IHtmlString>的实例。 - Daniel Hilgarth
5
我正在观看一连串的点赞,针对的是尚未解决的问题.. - Soner Gönül
3
@SonerGönül 是的,看到这个问题获得多少赞很有趣。提供的代码不可能抛出这样的异常。 - Jehof
显示剩余9条评论
1个回答

0

我假设IHtmlString是在System.Web命名空间中定义的。

在您的代码中定义了IHtmlString接口并实现了一个类,将其添加到列表之前,这种情况不应该发生。

请检查一下,


这是System.Web.IHtmlString - mfrieling
编译器不会让这样的代码编译 - 无法调用Add方法。 - Knaģis

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接