C# 从文档中的某个模式检索实体后,为什么必须检查实体的模式?

C# 从文档中的某个模式检索实体后,为什么必须检查实体的模式?,c#,schema,entity,revit-api,C#,Schema,Entity,Revit Api,我是Revit Api的初学者,正在努力跟上即将到来的与操作可扩展存储相关的项目。我从一位高级开发人员那里收到了一个示例代码,该代码试图从元素中获取可扩展存储,如下所示: // _schema is known Entity ent = element.GetEntity(_schema); if (ent?.Schema != null) { // code to retrieve extensible storage here // produce correct result } 我尝试

我是Revit Api的初学者,正在努力跟上即将到来的与操作可扩展存储相关的项目。我从一位高级开发人员那里收到了一个示例代码,该代码试图从元素中获取可扩展存储,如下所示:

// _schema is known
Entity ent = element.GetEntity(_schema);
if (ent?.Schema != null)
{
// code to retrieve extensible storage here
// produce correct result
}
我尝试用我的业余代码替换剪报集:

Entity ent = element.GetEntity(_schema);
if (ent != null && ent.IsValidObject)
{
// code to retrieve extensible storage here
// my code produces incorrect results   
}
这两套剪接装置有什么不同?如果我使用某个模式检索实体,那么entity.schema必须返回相同的模式,对吗?为什么我必须再次检查实体的模式才能得到正确的结果?
谢谢大家抽出时间。您的回答将对我即将进行的项目有很大帮助。

您的代码看起来更明智、更可靠。检查指定模式检索到的实体的模式确实没有意义。但是,我不理解这些评论的含义。

我很抱歉给您带来困惑,因为我不是以英语为母语的人。我和你一开始的想法是一样的,但是我的前辈的代码产生了一个更可靠、更准确的结果。在本例中,假设只有1个结果(我的前辈的代码就是这样做的),而我的代码产生的结果要多得多,而且所有这些结果都是不正确的。我的猜测是,输入模式(_模式)和实体模式(Entity.schema)不一定是同一个模式。我已经了解到,该模式保存在revit中(它在整个会话中始终存在),并且可能在当前图形/文档中无效。如果是这样的话,那么我的代码不应该是一个非空且有效的实体。我只希望有人能澄清我的想法。附言:为了更好地理解,我还编辑了我帖子中的评论。希望有帮助。