C#如何减少重复代码?

时间:2012-05-24 16:50:18

标签: c#

我在很大程度上自学了C#代码,我在大学上了一堂课并没有太多帮助......确实学会了如何学习如何学习。所以我在这里和那里创建了工具,在线学习。 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#,我知道它已经内置了减少重复代码的方法,只是不知道如何找到它们。

感谢任何帮助或示例。

4 个答案:

答案 0 :(得分:7)

向我提出的最简单的解决方案是将其变成一种方法。 (我将离开access modifier for the function up to you ...这取决于您将重用此代码的位置)

int CustomCompare(int leftHandSide, int rightHandSide)
{
int calc;
 if (leftHandSide >= rightHandside)
 {
  do something;
 }
 else
 {
  leftHandSide= 33
 }
return leftHandSide
}

您只需传入变量:

calc = CustomCompare(calc, calc3)

如果需要,您甚至可以将do something部分更改为您传入的自定义操作。看看Action in MSDN

int CustomCompare(int leftHandSide, int rightHandSide, Action doSomething)
{
int calc;
 if (leftHandSide >= rightHandside)
 {
  doSomething();
 }
 else
 {
  leftHandSide= 33
 }
return leftHandSide
}

...

calc = CustomCompare(calc, calc3, 
    ()=>{do some stuff that will be executed inside the method});

And Func can allow you to return a value from that doSomething action

答案 1 :(得分:2)

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

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

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

答案 2 :(得分:1)

如何在类中创建私有方法,然后在需要完成计算时调用该方法。这样可以一次又一次地消除重写代码。

示例:

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
}

旁注:我更喜欢先安排所有变量,然后对其进行操作(函数调用等)(基于与单元测试相关的Arrange-Act-Assert)。但是,我这样做是为了强调我的观点。

答案 3 :(得分:0)

错误....调用函数?

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

另外,请记住缩进。当你开始一个新的范围时,在里面添加一些空格。