C# 从抽象类变量中检索非抽象类属性值
我有一个库,其中ModelElement是一个抽象类,ModelBeam和ModelShell是从ModelElement继承的类。ModelShell专门有一个称为“mesh”的属性,它的值是一个mesh类。我想知道在检查ModelElement变量是否为ModelShell对象后,如何从该变量检索网格 我希望类似上面的代码: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
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已经完成了简单的类型转换。他们的问题只是以安全的方式进行转换,