C# 如何减少重复代码?

C# 如何减少重复代码?,c#,C#,我在很大程度上自学了C#code,我在大学里参加了一个没有多大帮助的课程……我确实学会了如何遵循一本书。因此,我在这里和那里创建了在线学习工具。Stackoverflow是我最喜欢的网站,通常社区都很有帮助 不管怎么说,我的问题是,我正在创建一个WPF程序,它对许多小数进行多次计算,通过反复使用相同的代码计算,我得到了相同的结果,它工作得很好,但我知道有一种更简单的方法,用更少的行来完成。我似乎缺少这方面的知识 下面是一个我将如何做事的例子 int int1 = 4; int int2 = 2;

我在很大程度上自学了C#code,我在大学里参加了一个没有多大帮助的课程……我确实学会了如何遵循一本书。因此,我在这里和那里创建了在线学习工具。Stackoverflow是我最喜欢的网站,通常社区都很有帮助

不管怎么说,我的问题是,我正在创建一个WPF程序,它对许多小数进行多次计算,通过反复使用相同的代码计算,我得到了相同的结果,它工作得很好,但我知道有一种更简单的方法,用更少的行来完成。我似乎缺少这方面的知识

下面是一个我将如何做事的例子

int int1 = 4;
int int2 = 2;
int int3 = 6;
int int4 = 8;
int calc1 = 0;
int calc2 = 0;
int calc3 = 0;

calc = int1 * int4
calc2 = int1 * int2
calc3 = int3 * int3

if (calc >= calc3)
{
do something;
}
else
{
calc = 33
}

if (calc2 >= calc3)
{
do something;
}
else
{
calc2 = 33
}

if (calc3 >= calc2)
{
do something;
}
else
{
calc3 = 33
}

if (calc3 >= calc)
{
do something;
}
else
{
calc2 = 33
}
我希望这足够清楚。。我可以重复代码,但我只是不确定如何更好地使用C,我知道它有助于减少重复代码,只是不知道如何找到它们


非常感谢您的帮助或示例。

在同一类的方法之间重用代码的最简单方法是为该计算定义一个私有方法。这样,您就可以通过调用一个方法来引用该代码,而不是通过复制粘贴一些代码。事实上,每次复制粘贴时,您都知道缺少一个方法

如果需要在相关类之间共享代码,可以在基类中创建受保护的方法


最后,对于项目范围的“水平”重用,您可以定义一个静态帮助器类,并将您的方法定义为公共静态。这样,项目中的每个类都可以重用您的计算。

在相同类的方法之间重用代码的最简单方法是为该计算定义一个私有方法。这样,您就可以通过调用一个方法来引用该代码,而不是通过复制粘贴一些代码。事实上,每次复制粘贴时,您都知道缺少一个方法

如果需要在相关类之间共享代码,可以在基类中创建受保护的方法


最后,对于项目范围的“水平”重用,您可以定义一个静态帮助器类,并将您的方法定义为公共静态。这样,项目中的每个类都可以重用您的计算。

在类中创建一个私有方法如何,然后在需要完成计算时调用该方法。这样就避免了反复重写代码

例如:

int int1 = 4;
int calc1 = 0;
Calculation(int1, calc1);

int int2 = 2;
int calc2 = 0;
Calculation(int2, calc2);

//private method
private Calculation(int integer, int calculation)
{
    //calculate
}

旁注:我更喜欢先排列所有变量,然后对其执行act(函数调用等)(基于与单元测试相关联的arrange act Assert)。然而,我这样做是为了强调我的观点。

在类中创建一个私有方法怎么样,然后在需要进行计算时调用该方法。这样就避免了反复重写代码

例如:

int int1 = 4;
int calc1 = 0;
Calculation(int1, calc1);

int int2 = 2;
int calc2 = 0;
Calculation(int2, calc2);

//private method
private Calculation(int integer, int calculation)
{
    //calculate
}

旁注:我更喜欢先排列所有变量,然后对其执行act(函数调用等)(基于与单元测试相关联的arrange act Assert)。然而,我这样做是为了强调我的观点。

我突然想到的最简单的解决方案是将其转化为一种方法。(我将离开…这取决于您将在何处重用此代码)

您只需传入变量:

calc = CustomCompare(calc, calc3)
如果需要,您甚至可以将dosomething部分更改为您传入的自定义操作。看看


我想到的最简单的解决方案就是将其转化为一种方法。(我将离开…这取决于您将在何处重用此代码)

您只需传入变量:

calc = CustomCompare(calc, calc3)
如果需要,您甚至可以将dosomething部分更改为您传入的自定义操作。看看


错误。。。。调用函数

doCalc(4, 2, 6, 8)

static public void doCalc(int int1, int int2, int int3, int int4)
{
  int calc1 = int1 * int4
  int calc2 = int1 * int2
  int calc3 = int3 * int3

  if (calc >= calc3)
  {
    do something;
  }
  else
  {
    calc = 33
  }

  if (calc2 >= calc3)
  {
    do something;
  }
  else
  {
    calc2 = 33
  }

  if (calc3 >= calc2)
  {
    do something;
  }
  else
  {
    calc3 = 33
  }

  if (calc3 >= calc)
  {
    do something;
  }
  else
  {
    calc2 = 33
  }
}

另外,注意压痕。当你开始一个新的作用域时,在其内部添加一些空格。

错误。。。。调用函数

doCalc(4, 2, 6, 8)

static public void doCalc(int int1, int int2, int int3, int int4)
{
  int calc1 = int1 * int4
  int calc2 = int1 * int2
  int calc3 = int3 * int3

  if (calc >= calc3)
  {
    do something;
  }
  else
  {
    calc = 33
  }

  if (calc2 >= calc3)
  {
    do something;
  }
  else
  {
    calc2 = 33
  }

  if (calc3 >= calc2)
  {
    do something;
  }
  else
  {
    calc3 = 33
  }

  if (calc3 >= calc)
  {
    do something;
  }
  else
  {
    calc2 = 33
  }
}

另外,注意压痕。当你开始一个新的作用域时,在其内部添加一些空格。

你经常写这段代码吗?或者你想减少这段代码?你想解决什么问题?您提供的代码没有提供任何上下文。请在文本中提供更明确的信息或使用更好的变量名。只需选择重复代码并将其放入适当的方法。您经常编写这段代码吗?或者你想减少这段代码?你想解决什么问题?您提供的代码没有提供任何上下文。请在文本中提供更明确的信息或使用更好的变量名。只需选择重复代码并将其放入适当的方法中。请向匿名downvoter解释此建议的错误。向匿名downvoter,你能解释一下这个建议的错误吗?虽然我没有否决这个建议,但请注意if…else的重复。这允许一个比你写的更小的函数。我不知道是谁否决了这个(以及这个问题的所有其他答案),但这是一个合理的答案+1来补偿。@JustinPihony如果每个“做某事”都是相同的,那么是的,它们可以被压缩。如果每一个都不同,那么你就不能做很多事情了。@Servy-True,但看起来它们都是一样的。你仍然可以去掉if-else,因为如果你真的想要的话,它基本上是一样的,就像我建议的那样使用Action和Func。这允许一个比你写的更小的函数。我不知道是谁否决了这个(以及这个问题的所有其他答案),但这是一个合理的答案+1来补偿。@JustinPihony如果每个“做某事”都是相同的,那么是的,它们可以被压缩。如果每一个都不同,那么你就不能做很多事情了。@Servy-True,但看起来它们都是一样的。你仍然可以去掉if-else,因为如果你真的想要的话,它基本上是一样的,就像我建议的那样使用Action和Func。正如一个小提示,这与消除代码重用相反:)@Blindy它允许使用