重构到扩展方法(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];

            }

        }

 

 

 

 

你可能感兴趣的:(集合)