Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从抽象类变量中检索非抽象类属性值_C#_Abstract Class - Fatal编程技术网

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

C# 从抽象类变量中检索非抽象类属性值,c#,abstract-class,C#,Abstract Class,我有一个库,其中ModelElement是一个抽象类,ModelBeam和ModelShell是从ModelElement继承的类。ModelShell专门有一个称为“mesh”的属性,它的值是一个mesh类。我想知道在检查ModelElement变量是否为ModelShell对象后,如何从该变量检索网格 我希望类似上面的代码: foreach (ModelElement elem in model.elems) { if (elem.GetType() == typeof(ModelB

我有一个库,其中ModelElement是一个抽象类,ModelBeam和ModelShell是从ModelElement继承的类。ModelShell专门有一个称为“mesh”的属性,它的值是一个mesh类。我想知道在检查ModelElement变量是否为ModelShell对象后,如何从该变量检索网格

我希望类似上面的代码:

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
,这将返回false,并且永远不会进入If块

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

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

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

执行强制转换可能会对您有所帮助:
Mesh-Mesh=((Mesh)elem).Mesh
search for visitor Pattern那是Java?问题是C#?对不起。。。没注意到!!此外,OP已经完成了简单的类型转换。他们的问题只是以安全的方式进行转换,