日期:2014-05-18  浏览次数:20792 次

为什么这样类型转换有时候会错?
C# code
            foreach (IDlg3UCEx t in this.Controls)
            {
                if(t!=null)            arr.Add(t.ParaName+"="+t.ParaValue);
            }


IDlg3UCEx是用户控件的基类

有时候这样时候会包转换失败的异常

但是这样就没事
C# code
            foreach (Control obj in this.Controls)
            {
                IDlg3UCEx t = obj as IDlg3UCEx;
                if(t!=null)            arr.Add(t.ParaName+"="+t.ParaValue);
            }


我是新手,希望前辈指点一下。

------解决方案--------------------
as 运算符类似于强制转换操作;但是,如果转换不可行,as 会返回 null 而不是引发异常。它是类型安全的.

上面的foreach循环会引发异常是因为有时候这种强制转换会不成功.

下面的不会引发异常是因为as 是类型安全的强制类型转换操作符的缘故,它执行强制转换时若不成功,返回null,而不是抛出异常.