C# 代码实现的替代方法

C# 代码实现的替代方法,c#,.net,C#,.net,这个标题不是很有意义,但我不想分享它的其他名称。后来我写了一段代码。基于此,我正在编写代码来检查是否存在重复项。代码如下 curNumber = getTOCReference(selItem.SNo, IsParent); CheckForDuplicates(curNumber, IsParent,out realTOCRef); curNumber = realTOCRef; CheckForDuplicates的代码是 ListViewItem curItem = th

这个标题不是很有意义,但我不想分享它的其他名称。后来我写了一段代码。基于此,我正在编写代码来检查是否存在重复项。代码如下

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并尝试查找它是否已经存在于中,如果存在一个现有的TOC,则获取一个新的TOC。一旦确定生成的TOC不在列表中,它就会将其存储在realTOCRef中,并将其发送回主调用代码

我使用“out”返回最后生成的TOC,这是我不想做的事情。我这样做的原因是,在生成非重复的TOC之后,返回并没有返回到调用代码,而是在前面的实例中循环,然后返回。当环回发生时,要返回的TOC也被重置


如果您能在这方面提供帮助,我将不胜感激。

我不知道您在找什么

我的假设是,你正在寻找类似以下的东西

现有电话:

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;
        }

当您有一个单独的参数时,通常可以通过使用该值作为方法的返回值来删除它。用返回值替换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;
}
至于设计,我觉得这段代码应该是您的
gettoreference
的一部分,这样客户就不必担心重复数据消除-将重复数据消除作为
gettoreference
的基本功能的一部分是有意义的。这并不复杂-只是一点重命名和一些胶水:

  • gettoreference
    重命名为
    getnextocreference
    ,因为它实际上就是这样做的-查找下一个TOC值,而不检查重复项
  • 创建一个新方法
    GetNextAvailableToRefernece
    。对我来说,
    gettoreference
    意味着检索某种保存的状态,并且多个调用将返回相同的值。这不是它所做的,所以新的名字很清楚。看起来是这样的:
(本质上是您在页面顶部提供的代码,经过重构以使用返回值,包装在方法中。)

通过这些更改,当您需要新的引用时,可以调用
getnextavailabletoccerence
,并且可以确保它是唯一的(没有重复)


我将代码样式保持原样-我同意您可以更加一致,并为一些逻辑提供注释-尤其是
gettoReference
,因为这会根据方法参数做4件不同的事情。当然,还有单元测试,这样你就可以确保它做到你所说的

问题不是那么清楚。我希望您正在重构CheckForDuplicates代码,并按如下方式调用。--------现有:检查副本(curNumber、IsParent、out realTOCRef);curNumber=realTOCRef;------------必填项:curNumber=支票一式两份(curNumber,IsParent);那是行不通的。可能是因为同一个问题。发生的情况是,如果循环运行一次,我们有一个副本curNumber和多个循环,它将为每个循环创建一个单独的副本,当遇到第一个返回时,它将返回到curNumber的旧副本并返回该副本。我想这就是我所知道的。感谢您的回复sachin:)第一部分正确吗?我假设您正在寻找的函数是curNumber=CheckForDuplicates(curNumber,IsParent);我希望返回上次循环中分配的curNumber。在这种情况下,情况并非如此。mdma有正确的答案。是时候重构代码了。
String GetNextAvailableTOCReference(String curNumber, bool IsParent) 
{
   String newNumber = GetNextTOCRefrence(curNumber, IsParent);
   return CheckForDuplicates(newNumber, IsParent);   
}