首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法将“System.Web.UI.LiteralControl”类型的对象强制转换为“System.Web.UI.HtmlControls.HtmlImage”类型

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

Stack Overflow用户
提问于 2013-10-24 12:14:55
回答 1查看 4.9K关注 0票数 1

我有一个很长的图片列表,我想把它们的img.src值按它们的编号添加进去。我使用下面的代码滚动图像。我必须使用img控件,因为图像是.tif。

代码语言:javascript
复制
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,所以我得到以下错误

代码语言:javascript
复制
Unable to cast object of type 'System.Web.UI.LiteralControl' to type 'System.Web.UI.HtmlControls.HtmlImage'.

我怎么才能避开这一切?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-10-24 12:16:27

foreach循环中,使用以下命令:

代码语言:javascript
复制
ThumbnailPanel.Controls.OfType<System.Web.UI.HtmlControls.HtmlImage>()

而不是:

代码语言:javascript
复制
ThumbnailPanel.Controls

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

代码语言:javascript
复制
if (c is System.Web.UI.HtmlControls.HtmlImage)

或者这个:

代码语言:javascript
复制
System.Web.UI.HtmlControls.HtmlImage imageBox =
    (System.Web.UI.HtmlControls.HtmlImage)c;

c已经是正确的类型了。

现在考虑一下最初的问题。您还可以将foreach更改为:

代码语言:javascript
复制
foreach (var c in ThumbnailPanel.Controls)

而且它会编译,因为var会评估为Control。但是,由于使用了OfType方法,现在确实没有必要进行所有这些检查。这是个更干净的方法。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19565667

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档