c#如何向下转换对象

Chi*_*hin 5 .net c#

我有以下幻灯片对象列表.根据对象'type'var的值,我想在列表中向上转换Slide对象.可能吗?

foreach(Slide slide in slidePack.slides)
{
    if(slide.type == SlideType.SECTION_MARKER)
    {
      //upcast Slide to Section
    }
}
Run Code Online (Sandbox Code Playgroud)

Section扩展Slide并添加一个参数.

Fre*_*örk 9

是的,你可以这样做:

Section section = (Section)slide;
Run Code Online (Sandbox Code Playgroud)

...要么:

Section section = slide as Section;
Run Code Online (Sandbox Code Playgroud)

它们之间的区别在于,如果slide不能转换为第一个将抛出异常Section,而如果无法转换则第二个将返回异常null.


Sam*_*ell 7

这是处理该演员表的正确方法.

编辑:有一些方法可以设计程序,不需要你正在寻找的测试/强制转换,但如果遇到需要尝试将C#对象强制转换为某种类型并根据成功处理不同方式的情况,绝对是这样做的方式.

Section section = slide as Section;
if (section != null)
{
    // you know it's a section
}
else
{
    // you know it's not
}
Run Code Online (Sandbox Code Playgroud)