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

같은 클래스의 메소드간에 코드를 재사용하는 가장 간단한 방법은 해당 계산을위한 개인 메소드를 정의하는 것입니다. 이렇게하면 코드를 복사하여 붙여 넣는 것이 아니라 메서드를 호출하여 해당 코드를 참조 할 수 있습니다. 실제로 복사하여 붙여 넣기 할 때마다 메소드가 누락되었음을 알게됩니다.

관련 클래스간에 코드를 공유해야하는 경우 기본 클래스에서 보호 된 메서드를 만들 수 있습니다.

마지막으로, 프로젝트 전체 "수평"재사용을 위해 정적 도우미 클래스를 정의 할 수 있으며 public static으로 메소드를 정의 할 수 있습니다. 이 방법으로 프로젝트의 모든 클래스가 계산을 재사용 할 수 있습니다.

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 
} 

측 주 : I는, 우선 변수를 배치 한 다음에 (등 함수 호출) 작용 선호 (에 기초하여 정렬-ACT-어설 유닛 테스트와 관련된 참조). 그러나, 나는이 점을 강조하기 위해 이것을했다.

+1

작은 노트와 마찬가지로, 코드 재사용을 제거하는 것과 반대입니다. – Blindy

+1

@Blindy 클래스 내에서 재사용 할 수 있기 때문에 정확히 반대라고하지는 않겠지 만 ... 개인적으로 확실히 문을 닫습니다. –

+0

@Blindy 나는 같은 코드를 반복적으로 ** 다시 작성하고 싶지 않다는 것에 동의 할 수 있다고 생각한다. –

7

나에게 나타나는 가장 간단한 해결책은 그것을 방법으로 바꾸는 것입니다.

calc = CustomCompare(calc, calc3) 

당신도 뭔가 부분을 변경할 수 있습니다 :

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

당신은 당신의 변수에 전달할 것 (나는이 코드를 재사용 할 위치에 따라 달라집니다 ... access modifier for the function up to you를 떠나) 원하는 경우 전달할 맞춤 동작입니다.

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

우리의 모든 대답이 downvoted되고있다 물고기 같아요 .... –

0

잘못 Action in MSDN를 살펴 보자 .... 함수를 호출?

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

나는 이것을 downvote하지 않은 동안 if ... else의 반복을 확인하십시오. 그게 당신이 쓴 것보다 작은 함수를 허용합니다 –

+0

나는이 질문에 대한 다른 대답들과 함께 누가 이것을 downvoted했는지 모르지만 이것은 합리적인 대답입니다. 보상하려면 +1하십시오. – dasblinkenlight

+0

@ JustinPihony "할 일"이 동일하다면 그렇습니다. 응축 될 수 있습니다. 각각이 다른 경우, 할 수있는 일이별로 없습니다. – Servy

관련 문제