2012-05-24 108 views
0

我已经在很大程度上自学了自己的C#代码,我在大学上过一堂课并没有多大帮助......确实学会了如何遵循一本书。所以我创建了工具在这里和那里在线学习示例。 Stackoverflow是我最喜欢的网站,通常社区是有帮助的...C#如何减少重复代码?

无论如何,我的问题是这样的,即时创建一个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#好,我知道它已经内置在减少重复代码的方式,只是不知道怎么找他们。

任何帮助或例子表示赞赏。

+5

你经常写这段代码吗?或者你想减少这块代码? – ediblecode

+1

你想解决什么问题?您提交的代码不会提供任何上下文。请在文本中提供更多明确的信息或使用更好的变量名称。 – vansimke

+1

只需选择重复的代码并将其放入适当的方法。 – MoonKnight

回答

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 
} 

侧面说明:我喜欢先安排所有变量,然后采取行动(函数调用等)就可以了(根据安排,法,断言单元测试相关)。但是,我这样做是为了强调我的观点。

+1

就像一个小纸条,这是消除代码重用的相反:) – Blindy

+1

@Bindy它允许在班级内重复使用......所以我不会说这完全是相反的......但私人绝对关闭了一些门 –

+0

@Bindind我认为我们都可以同意我们不希望**一遍又一遍地重写相同的代码。 – 2012-05-24 17:10:58

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) 

你甚至可以改变做点什么部分如果您愿意,可以成为您通过的自定义操作。看看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

+4

对于匿名downvoter,你能解释这个建议有什么问题吗? –

+4

似乎可疑,我们所有的答案都被低估了...... – 2012-05-24 17:00:25

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

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

+0

虽然我没有低估这一点,但请注意if ... else的重复。这允许比你写的更小的函数 –

+0

我不知道谁降低了这个(连同这个问题的所有其他答案),但这是一个合理的答案。 +1来补偿。 – dasblinkenlight

+0

@JustinPihony如果每个“做某事”都是一样的,那么是的,它们可以被压缩。如果每个人都不同,那么你可以做的事情并不多。 – Servy