标题并不完全有意义,但我不会分享其他名称。我稍后写了TOC Generation代码。基于此,我正在编写代码来检查重复项。代码如下
curNumber = getTOCReference(selItem.SNo, IsParent);
CheckForDuplicates(curNumber, IsParent,out realTOCRef);
curNumber = realTOCRef;
CheckForDuplicates的代码是
ListViewItem curItem = this.tlvItems.FindItemWithText(curNumber);
if (curItem != null)
{
curNumber = this.getTOCReference(curNumber, !IsParent);
CheckForDuplicates(curNumber, IsParent,out realTOCRef);
}
else
{
realTOCRef= curNumber;
}
这段代码的作用是,它获取TOC并尝试查找它是否已存在于ObjectListView中,并在存在现有TOC时获得新的TOC。一旦确定生成的TOC不在列表中,它就将其存储在realTOCRef中并将其发送回主调用代码。
我用“out”来返回最后生成的TOC,这是我不想做的事情。我这样做的原因是在生成非重复TOC之后,返回没有返回到调用代码,而是循环通过先前的实例然后它返回。当循环返回时,要返回的TOC也被重置。
我将不胜感激。
答案 0 :(得分:2)
当您有一个out参数时,通常可以使用该值作为方法的返回值来删除它。用返回值替换out参数如下所示:
String CheckForDuplicates(String curNumber, bool IsParent)
{
ListViewItem curItem = this.tlvItems.FindItemWithText(curNumber);
if (curItem != null)
{
String newNumber = this.getTOCReference(curNumber, !IsParent);
curNumber = CheckForDuplicates(newNumber, IsParent);
}
// else - curNumber is correct - not a duplicate
return curNumber;
}
至于设计,我觉得这段代码应该是你getTOCReference
的一部分,这样客户就不必担心重复数据删除了 - 将重复数据删除作为getTOCReference
基本功能的一部分是有意义的。 。它没什么复杂的 - 只需要一点点重命名和一些胶水:
getTOCReference
重命名为getNextTOCReference
,因为它确实是这样做的 - 找到接下来的TOC值,而不检查重复项。GetNextAvailableTOCRefernece
。对我来说GetTOCRefernece
意味着要检索某种已保存的状态,并且多次调用将返回相同的值。这不是它的作用,所以新名称清楚地说明了。它看起来像这样:(基本上是你在页面顶部给出的代码,重构为使用返回值,包含在方法中。)
String GetNextAvailableTOCReference(String curNumber, bool IsParent)
{
String newNumber = GetNextTOCRefrence(curNumber, IsParent);
return CheckForDuplicates(newNumber, IsParent);
}
通过这些更改,您需要新参考时调用getNextAvailalbeTOCreference
,并确保它是唯一的(没有重复项。)
我已经保留了代码风格 - 我同意你可以更加一致,并为某些逻辑提供注释 - 特别是getTOCReference
,因为根据方法参数,它会做4种不同的事情。当然还有单元测试,这样你就可以确定它能做到你说的那样!
答案 1 :(得分:0)
我不确定你在找什么。
我认为你正在寻找类似追随者的东西。
现有电话:
CheckForDuplicates(curNumber, IsParent,out realTOCRef);
curNumber = realTOCRef;
必填电话:
curNumber =CheckForDuplicates(curNumber, IsParent);
如果是,只需将代码更改为以下即可。
ListViewItem curItem = this.tlvItems.FindItemWithText(curNumber);
if (curItem != null)
{
curNumber = this.getTOCReference(curNumber, !IsParent);
return CheckForDuplicates(curNumber, IsParent);
}
else
{
return curNumber;
}