如何重构此属性';s代码?c#

如何重构此属性';s代码?c#,c#,asp.net,asp.net-mvc-3,refactoring,C#,Asp.net,Asp.net Mvc 3,Refactoring,我有一个视图模型,其属性表示年和月: public IEnumerable<SelectListItem> Years { get { return new SelectList( Enumerable.Range(1900, 112) .OrderByDescending(year => year) .Select(y

我有一个视图模型,其属性表示年和月:

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");
        }
    }
public数年
{
得到
{
返回新的选择列表(
可枚举范围(1900、112)
.OrderByDescending(年=>year)
.选择(年份=>new SelectListItem
{
值=year.ToString(CultureInfo.InvariantCulture),
Text=year.ToString(CultureInfo.InvariantCulture)
}
)“价值”、“文本”);
}
}
公众假期数月
{
得到
{
返回新的选择列表(
可枚举范围(1,12)
.OrderByDescending(月=>month)
.选择(月份=>new SelectListItem
{
Value=month.ToString(CultureInfo.InvariantCulture),
Text=month<10?string.Format(“0{0}”,month):month.ToString(CultureInfo.InvariantCulture)
}
)“价值”、“文本”);
}
}

当然我在这里使用复制粘贴方法)我如何重构代码?通过某种方式将数字作为参数传递给某个助手方法

只是想大声说出来,但这里的常见部分是“获取一系列值,对它们进行排序,并将每个值包装在一个包装器对象中,文本值为(如何获取文本)”。也就是说,你可以做如下事情:

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)
            });
}
private IEnumerable GetXXXX(
int start,
整数计数,
Func(名称获取者)
{
返回可枚举
.范围(开始、计数)
.OrderByDescending(i=>i)
.选择(i=>
新建SelectListItem()
{ 
Value=i.ToString(CultureInfo.InvariantCulture),
Text=nameGetter(i)
});
}
例如,您的“月份”是:

public IEnumerable<SelectListItem> Months
{
    get 
    { 
        return GetXXXX(1, 12, m => 
              m < 10 
                ? string.Format("0{0}", m) 
                : m.ToString(CultureInfo.InvariantCulture));
    }
}
公共IEnumerable月
{
得到
{ 
返回GetXXXX(1,12,m=>
m<10
?string.Format(“0{0}”,m)
:m.ToString(CultureInfo.InvariantCulture));
}
}
你的运气可能会更好