无法将“System.Web.UI.LiteralControl”类型的对象强制转换为“System.Web.UI.HtmlControls.HtmlImage”类型

时间:2013-10-24 12:14:56

标签: c# .net casting

我有一长串图片,我想用它们的编号添加他们的img.src值。我正在使用以下代码滚动图像。我必须使用img控件,因为图像是.tif

foreach (System.Web.UI.HtmlControls.HtmlImage c in ThumbnailPanel.Controls)
{
    if (c is System.Web.UI.HtmlControls.HtmlImage)
    {
        System.Web.UI.HtmlControls.HtmlImage imageBox = (System.Web.UI.HtmlControls.HtmlImage)c;

        if (imageBox.ID.Equals("TNimage" + i.ToString()))
        {
           using (var DrawImgCheck = new WebClient())
           {
             .
             .
             .
           }
        }
    }
}

问题是因为是HtmlControl而我的面板是UI.Control我收到以下错误

Unable to cast object of type 'System.Web.UI.LiteralControl' to type 'System.Web.UI.HtmlControls.HtmlImage'.

我怎样才能解决这个问题?

1 个答案:

答案 0 :(得分:0)

foreach循环中,使用:

ThumbnailPanel.Controls.OfType<System.Web.UI.HtmlControls.HtmlImage>()

而不是:

ThumbnailPanel.Controls

这也意味着在循环中,你不需要这一行:

if (c is System.Web.UI.HtmlControls.HtmlImage)

或者这个:

System.Web.UI.HtmlControls.HtmlImage imageBox =
    (System.Web.UI.HtmlControls.HtmlImage)c;

c已经是正确的类型。


现在考虑原始问题。您也可以将foreach更改为:

foreach (var c in ThumbnailPanel.Controls)

它会被编译,因为var会评估为Control。但是,由于OfType方法,现在没有必要立即进行所有检查。这是一种更清洁的方法。