2012-05-24 112 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