2017-03-29 4 views
-4

다양한 함수는 다른 매개 변수를 가지며 값을 반환해야합니다.C# 다른 함수 호출을 제외하고 같은 코드를 사용하는 리팩토링 메서드

예 :

public T Foo(a, b, c, func_pointer) 
{ 
    //common code 
    if(no errors) 
    { 
     return func_pointer(a, b, c) 
    } 
    //common code 
} 

public T Foo(a, b, c, **d**, func_pointer) 
{ 
    //common code 
    if(no errors) 
    { 
     return func_pointer(a, b, c, **d**) 
    } 
    //common code 
} 

코드 중복을 피하기 위해 어쨌든 있나요?

+2

당신이해야하는 반송 후, 음, 어디 공통 코드를 –

+3

를 컴파일 적어도 포스트 샘플 코드? –

+0

@KeithNicholas 샘플 코드 – user5121292

답변

1

이 문제를 처리하는 한 가지 방법은 더 적은 수의 인수로 메소드에 다음 인수 수가 더 많은 메소드를 호출하고 누락 된 args의 기본값을 전달하는 것입니다. 그런 다음 체인의 마지막 메소드는 실제 코드를 가지며 기본값이 필요한 모든 것을 수행합니다.

-1

시도해보십시오. 당신이 null를 사용하지 못할 수 있습니다

public T Foo(a, b, c, func_pointer) 
{ 
    Foo(a, b, c, null, func_pointer) 
} 

public T Foo(a, b, c, d, func_pointer) 
{ 
    //common code 
    if(no errors) 
    { 
     return func_pointer(a, b, c, d) 
    } 
    //common code 
} 

전화, 그것은 D의 유형이 무엇인지에 따라 달라집니다. 는 A, B의 'func_pointer'경우, C 코드 d은 받아 들일 수 없습니다 :

if(no errors) 
    { 
     if (d!=null){ 
      return func_pointer(a, b, c, d) 
     } else { 
      return func_pointer(a, b, c) 
     } 
    }