1

我在很大程度上自学了 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

4 回答 4

7

我想到的最简单的解决方案是将它变成一种方法。(我将把函数的访问修饰符留给你……这取决于你将在哪里重用这段代码)

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

你只需传入你的变量:

calc = CustomCompare(calc, calc3)

如果需要,您甚至可以将“做某事”部分更改为您传入的自定义操作。看看MSDN中的Action

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

Func 可以让你从那个 doSomething 动作中返回一个值

于 2012-05-24T16:56:58.713 回答
2

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

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

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

于 2012-05-24T16:56:13.537 回答
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)。但是,我这样做是为了强调我的观点。

于 2012-05-24T16:56:29.900 回答
0

Err....调用函数?

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

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

于 2012-05-24T16:58:17.857 回答