这个人是不错的不仅是数字,但对于更复杂的类型作为日期/时间。
第二种方法允许提供结果选择器 - 在某些情况下很有用。
public static IEnumerable<TItem> Range<TItem>(
TItem itemFrom, TItem itemTo, Func<TItem, TItem> itemSelector
) where TItem : IComparable
{
// Call to the below method
return Range(itemFrom, itemTo, itemSelector, o => o);
}
public static IEnumerable<TItem> Range<TItem, TResult>(
TItem itemFrom, TItem itemTo, Func<TItem, TItem> itemSelector, Func<TItem, TResult> resultSelector
) where TItem : IComparable
{
while (true)
{
yield return resultSelector(itemFrom);
if ((itemFrom = itemSelector(itemFrom)).CompareTo(itemTo) > 0)
break;
}
}
用法:
Range(1, 10, o => o + 3);
1
4
7
10
Range(
DateTime.Now,
DateTime.Now.AddYears(1),
o => o.AddMonths(1),
o => o.ToString("MMMM"));
January
February
March
April
May
June
July
August
September
October
November
December
January
这是不是一个错误的描述... –