重构到扩展方法(1):让集合操作更方便
1. 获取数组倒数N个
public static IEnumerable<T> GetFromEnd<T>(this T[] array, int count)
{
for (int i = array.Length - 1; i > array.Length - 1 - count; i--)
{
yield return array[i];
}
}
2. Foreach集合,连续做事情。
public static IEnumerable<T> ForEach<T>(this IEnumerable<T> enumerable, Action<T> action)
{
foreach (var item in enumerable)
{
action(item);
}
return enumerable;
}
3. Foreach集合,有条件的做事情。
public static IEnumerable<T> ForEach<T>(this IEnumerable<T> enumerable, Action<T> action, Predicate<T> condition)
{
foreach (var item in enumerable)
{
if (condition(item))
action(item);
}
return enumerable;
}
注意:必须return,否则无法支持链式操作,就是一直.Foreach().Foreach().Foreach()
4. For循环集合,委托返回当前索引。
public static IEnumerable<T> For<T>(this IEnumerable<T> enumerable, Action<int> action)
{
for (int i = 0; i < enumerable.Count(); i++)
{
action(i);
}
return enumerable;
}
5. 判断2个集合是否相等(值也相等)
public static bool EqualValue<T>(this IEnumerable<T> enumerable1, IEnumerable<T> enumerable2)
{
if (enumerable1 == enumerable2)
return true;
if (enumerable1.Count() != enumerable2.Count())
return false;
for (int i = 0; i < enumerable1.Count(); i++)
{
if (!enumerable1.ElementAt(i).Equals(enumerable2.ElementAt(i)))
return false;
}
return true;
}
6. 给集合增加一个数据项。
public static IEnumerable<T> Add<T>(this IEnumerable<T> enumerable, T item)
{
foreach (var obj in enumerable)
{
yield return obj;
}
yield return item;
}
7. 给集合减去一个数据项。
public static IEnumerable<T> Remove<T>(this IEnumerable<T> enumerable, T item)
{
foreach (var obj in enumerable)
{
if (!obj.Equals(item))
yield return obj;
}
}
8. 倒着去数组N个数据项。
public static IEnumerable<T> GetFromEnd<T>(this T[] array, int count)
{
for (int i = array.Length - 1; i > array.Length - 1 - count; i--)
{
yield return array[i];
}
}

浙公网安备 33010602011771号