給定一個可能的5個項目的列表,下面的方法將返回一個新的確切5個項目的列表(如果原始列表少於5個,則添加更多項目)。這工作正常,但現在我需要重構它,以便它可以處理一個通用T列表(一個將具有相同的年份和Cnt屬性)。我怎樣才能將這個方法轉換成一個List並讓它返回一個帶有5個元素的新List?如何爲列表創建新的通用項目<T>?
private static List<FiveYearComplex> CreateFiveYearTemplate(int startYear,
int endYear, ObjectResult<FiveYearComplex> result)
{
var list = new List<FiveYearComplex>(5);
for (int year = startYear; year < endYear; ++year)
{
list.Add(new FiveYearComplex() { Year = year, Cnt = 0 });
}
FiveYearComplex tmpItem;
foreach (var item in result)
{
tmpItem = list.Find(w => w.Year == item.Year);
if (tmpItem == null)
{
tmpItem = new FiveYearComplex() { Cnt = 0, Year = item.Year };
}
else
{
tmpItem.Cnt = item.Cnt;
}
}
return list;
}
當我嘗試使用List我終於碰到這個節:
for (int year = startYear; year < endYear; ++year)
{
list.Add(new T() { Year = year, Cnt = 0 });
}
,我得到一個錯誤......
謝謝!
出於完整性:
public interface IYearTemplate
{
int? Year { get; set; }
decimal? Cnt { get; set; }
}
private static List<T> CreateFiveYearTemplate <T> (
int startYear, int endYear,
ObjectResult<FiveYearAttendanceComplex> result)
where T : IYearTemplate, new()
{
var list = new List<T>(5);
for (int year = startYear; year < endYear; ++year)
{
list.Add(new T() { Year = year, Cnt = 0 });
}
T tmpItem;
foreach (var item in result)
{
tmpItem = list.Find(w => w.Year == item.Year);
if (tmpItem == null)
{
tmpItem = new T() { Cnt = 0, Year = item.Year };
}
else
{
tmpItem.Cnt = item.Cnt;
}
}
return list;
}
謝謝你。
你幾乎用回答了這個問題,就回到另一個 –
2011-05-01 20:12:22
但是當我嘗試做新的T(){=年一年...我得到一個錯誤? – 2011-05-01 20:13:14
你知道列表中的項目數量是基於'startYear'和'endYear'的值,而不是你以5的容量初始化列表的事實嗎? – juharr 2011-05-01 20:24:07