从抽象 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);
}
}
}
我有一个库,其中 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);
}
}
}