如果以下代码示例中有很多变量您不清楚它们的“类型”,我提前道歉,这是一个很大的库,我不能把所有的东西都放在这里,所以请考虑一下-level,变量的名称也很有帮助......
问题:一个“概念”可以有很多“关系”。这些关系中的每一个也可以有很多概念,例如像父亲和孩子一样,父亲有很多孩子,孩子本身可能是父亲并且有更多孩子等等......所以我想通过根父亲得到所有层次结构并将其写入文件...
我正在使用的高级代码是这样的,问题是当它获得没有更多孩子的孩子时,它会因 Null 异常而崩溃。所以它的对象在这一行是空的:
oUCMRConceptReltn = moTargetConceptList.ConceptReltns.get_ItemByIndex(i, false);
所以我想好吧,让我们在它周围做一个非空检查,是的,在它看到第一片叶子之后修复了崩溃,它没有走得更远,算法停止了。所以我调用递归的方式有问题,但无法弄清楚。
private void MyLoadMethod(string sConceptCKI)
{
UCMRConceptLib.UCMRConceptLoadQual oUCMRConceptLoadQual = new UCMRConceptLib.UCMRConceptLoadQual();
//Fill out UCMRConceptLoadQual object to get new list of related concepts
moTargetConceptList.Load(oUCMRConceptLoadQual;
// WHEN IT IS ZERO, THERE ARE NO MORE CHILDREN.
int numberofKids = moTargetConceptList.ConceptReltns.Count();
if (numberofKids == 0)
return ;
for (int i = 1; i <= numberofKids; i++)
{
oUCMRConceptReltn = moTargetConceptList.ConceptReltns.get_ItemByIndex(i, false);
//Get the concept linked to the relation concept
if (oUCMRConceptReltn.SourceCKI == sConceptCKI)
{
oConcept = moTargetConceptList.ItemByKeyConceptCKI(oUCMRConceptReltn.TargetCKI, false);
}
else
{
oConcept = moTargetConceptList.ItemByKeyConceptCKI(oUCMRConceptReltn.SourceCKI, false);
}
//write its name to the file...now recursion: go and find its children.
builder.AppendLine("\t" + oConcept.PrimaryCTerm.SourceString);
MyLoadMethod(oConcept.ConceptCKI);
}
return ;
}