2013-01-23 1 views
-1

나는 몇 년 몇 개월을 나타내는 특성을 가진 뷰 모델을 가지고 :이 부동산 코드를 리팩토링하는 방법은 무엇입니까? C#

확실히 나는이 코드를 리팩토링 어떻게 여기에 복사 & 붙여 넣기 방식)를 사용
public IEnumerable<SelectListItem> Years 
    { 
     get 
     { 
      return new SelectList(
       Enumerable.Range(1900, 112) 
       .OrderByDescending(year => year) 
       .Select(year => new SelectListItem 
       { 
        Value = year.ToString(CultureInfo.InvariantCulture), 
        Text = year.ToString(CultureInfo.InvariantCulture) 
       } 
      ), "Value", "Text"); 
     } 
    } 

    public IEnumerable<SelectListItem> Months 
    { 
     get 
     { 
      return new SelectList(
       Enumerable.Range(1, 12) 
       .OrderByDescending(month => month) 
       .Select(month => new SelectListItem 
       { 
        Value = month.ToString(CultureInfo.InvariantCulture), 
        Text = month < 10 ? string.Format("0{0}", month) : month.ToString(CultureInfo.InvariantCulture) 
       } 
      ), "Value", "Text"); 
     } 
    } 

? Mabby는 어떻게 든 숫자를 매개 변수로 전달하여 도우미 메서드에 전달합니까?

+5

즉 당신이 가능하게 뭔가를 할 수있는 진술 / – cadrell0

답변

1

그냥 큰 소리로 생각하지만, 여기에 공통적 인 부분은 "값의 범위를 가져 와서 순서를 정하고 텍스트 값 (텍스트 가져 오기 방법)"으로 래퍼 객체로 래핑하는 것입니다. 당신의 "달"은, 예를 들어, 것 그런

private IEnumerable<SelectListItem> GetXXXX(
     int start, 
     int count, 
     Func<int,string> nameGetter) 
{ 
    return Enumerable 
     .Range(start, count) 
     .OrderByDescending (i => i) 
     .Select(i => 
      new SelectListItem() 
      { 
       Value = i.ToString(CultureInfo.InvariantCulture), 
       Text = nameGetter(i) 
      }); 
} 

: 당신은 http://codereview.stackexchange.com에 더 좋은 행운이있을 수 있습니다

public IEnumerable<SelectListItem> Months 
{ 
    get 
    { 
     return GetXXXX(1, 12, m => 
       m < 10 
       ? string.Format("0{0}", m) 
       : m.ToString(CultureInfo.InvariantCulture)); 
    } 
} 
관련 문제