if中的代码重复问题

时间:2015-05-29 13:10:21

标签: c#-4.0 duplication

我有一个代码重复,我想避免,但我不能创建一个包含代码的方法,因为if中的一行有细微的差别。这就是我的意思:

代码1:

If case1 ()
{
    same code
    if()
    {
        same code 
        line1
    }

代码2:

If case2 ()
{
    same code
    if()
    {
        same code 
        line2
    }

除了一行(line1和line2)之外,两个代码都是相同的。由于代码很大,我希望能够在函数内复制它。你知道怎么做吗?

由于

2 个答案:

答案 0 :(得分:3)

一般来说,您正在寻找ActionFunc。这是一种封装可执行代码的类型:

public int YourCommonMethod(int parameter, Func<int, int> calculate)
{
   // some common code

   if(calculationNeeded)
   {
      // some common code
      result = calculate(parameter);
   }

   // more common code
}

然后您可以使用两种不同的计算方法调用它:

int result = YourCommonMethod(5, i => i + 17);

OR

int result = YourCommonMethod(5, i => i / 48);

只需采取行动,您就需要更少:

public int YourCommonMethod(int parameter, Action<int> doWork)
{
   // some common code

   if(calculationNeeded)
   {
      // some common code
      doWork(parameter);
   }

   // more common code
}

你可以这样称呼它:

int result = YourCommonMethod(5, Console.WriteLine);

OR

int result = YourCommonMethod(5, i => Console.WriteLine("Some string including {0}", i));

答案 1 :(得分:1)

您可以将代码拆分为多种方法:

if (case1)
{
    subMethod1();
    if ()
    {
        subMethod2();
        line1;
    }       
}

if (case2)
{
    subMethod1();
    if ()
    {
        subMethod2();
        line2;
    }       
}