繁体   English   中英

从抽象类变量中检索非抽象类属性值

[英]Retrieve non-abstract class property value from abstract class variable

我有一个库,其中ModelElement是抽象类,而ModelBeam和ModelShell是从ModelElement继承的类。 ModelShell专门具有一个称为“ mesh”的专有属性,其值是Mesh类。 我不知道如何在检查变量是ModelShell对象之后如何从ModelElement变量检索Mesh。

我希望类似上面的代码:

foreach (ModelElement elem in model.elems)
{
    if (elem.GetType() == typeof(ModelBeam))
    {
       conect.Add(elem._node_inds);
    }
    if (elem.GetType() == typeof(ModelShell))
    {
        Mesh mesh = elem.mesh;
        foreach (Mesh m in mesh)
        {
           conect.Add(m._node_inds);
        }
    }
}

使用is关键字,然后直接转换:

if (elem is ModelShell)
{
    var modelShell = (ModelShell)elem;
    foreach (var m in modelShell.mesh)
    {
        //...
    }
}

如果elem不是ModelShell则它将返回false,并且永远不会输入if块。

或者,您可以使用as关键字。 如果使用正确的类型进行转换,则此转换将执行强制转换,否则将导致null 因此,在强制转换之后,您需要检查变量是否为null

var modelShell = elem as ModelShell;
if (modelShell != null)
{
    foreach (var m in modelShell.mesh)
    {
        //...
    }
}

你可以试试这个..

if(elem instanceof ModelBeam){

}else if(elem instanceof ModelShell){

}

尝试以下代码。 基本上,使用operator is并强制转换为ModelShell即可。

foreach (ModelElement elem in model.elems)
    {
        if (elem is ModelBeam)
        {
            conect.Add(elem._node_inds);
        }
        if (elem is ModelShell)
        {
    Mesh mesh = ((ModelShell)elem).mesh;
            foreach (Mesh m in mesh)
            {
                conect.Add(m._node_inds);
            }
        }
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM