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

Retrieve non-abstract class property value from abstract class variable

我有一个库,其中 ModelElement 是一个抽象 class,而 ModelBeam 和 ModelShell class 是从 ModelElement 继承而来的。 ModelShell 专门有一个名为 "mesh" 的属性,它的值是一个 Mesh class。我想知道如何在检查变量是 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);
        }
    }
}

你可以试试这个..

if(elem instanceof ModelBeam){

}else if(elem instanceof ModelShell){

}

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

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

如果 elem 不是 ModelShell 这将 return 错误并且永远不会进入 if 块。

或者,您可以使用 as 关键字。如果您使用正确的类型进行转换,则此方法会执行转换,否则会导致 null。所以在转换之后你需要检查变量是否是 null 或者不是。

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

试试下面的代码。基本上,使用运算符 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);
            }
        }
    }